用C++代码数据结构队列写出程序 在排队过程中老人和小孩可以优先就诊 年龄大于70岁和小于12岁的为优先队列 其他年龄段为普通队列 每有2个优先队列的人就诊 就得轮到普通队列
时间: 2024-11-06 11:36:44 浏览: 16
在C++中,我们可以使用`std::queue`作为基础的数据结构,同时结合条件判断和自定义的队列节点来实现这个需求。这里我们创建一个`PriorityQueue`类,它继承自标准库的`std::queue`,并添加了一个年龄字段。当插入新元素时,会检查年龄,然后决定将其放入优先队列还是普通队列。每次从优先队列移除两个元素后,再从普通队列取出一个。
```cpp
#include <queue>
#include <iostream>
// 定义一个简单的队列节点,包含年龄属性
struct QueueNode {
int age;
bool isPriority; // 标记是否为优先队列
// 构造函数
QueueNode(int a, bool p = false) : age(a), isPriority(p) {}
};
// 自定义优先队列,基于std::queue
template <typename T>
class PriorityQueue : public std::queue<QueueNode> {
public:
void enqueue(int age) {
if (age <= 12 || age >= 70) { // 老人和小孩优先
QueueNode newNode(age, true);
push(newNode);
} else {
QueueNode newNode(age, false); // 其他年龄段为普通队列
push(newNode);
}
}
bool dequeue(int& age) {
if (!empty()) {
auto top = front();
front().isPriority ? --top.age : --_size; // 优先队列每移除2人,普通队列才移除1人
age = top.age;
pop();
return true;
}
return false;
}
};
int main() {
PriorityQueue<int> priorityQueue;
PriorityQueue<int>::iterator it;
// 示例操作
priorityQueue.enqueue(65); // 老人优先
priorityQueue.enqueue(8); // 孩子优先
priorityQueue.enqueue(30);
while (priorityQueue.size() > 1) { // 当有两个优先队列的人时
if (priorityQueue.dequeue(it)) { // 从优先队列取出
std::cout << "优先队列就诊:(" << *it << ")\n";
}
if (priorityQueue.size() == 1) { // 只剩下一个,视为普通队列
if (priorityQueue.dequeue(it)) { // 如果还有,取普通队列
std::cout << "普通队列就诊:(" << *it << ")\n";
} else {
break; // 没有了,停止处理
}
}
}
return 0;
}
```
阅读全文