数据结构与算法c++队列
时间: 2023-11-23 11:08:19 浏览: 83
以下是C++中队列的基本操作:
1. 循环顺序队列的初始化、求长度、入队、出队
```c++
const int MAXSIZE = 100; // 定义队列最大长度
template <typename T>
class Queue {
private:
T data[MAXSIZE]; // 队列数组
int front, rear; // 队头和队尾指针
public:
Queue() { // 初始化队列
front = rear = 0;
}
bool empty() { // 判断队列是否为空
return front == rear;
}
bool full() { // 判断队列是否已满
return (rear + 1) % MAXSIZE == front;
}
int size() { // 求队列长度
return (rear - front + MAXSIZE) % MAXSIZE;
}
bool push(T x) { // 入队
if (full()) return false;
data[rear] = x;
rear = (rear + 1) % MAXSIZE;
return true;
}
bool pop() { // 出队
if (empty()) return false;
front = (front + 1) % MAXSIZE;
return true;
}
T front() { // 获取队头元素
if (empty()) return NULL;
return data[front];
}
};
```
2. 双缓存队列的实现方法
```c++
template <typename T>
class DoubleBufferQueue {
private:
queue<T> q1, q2; // 两个队列
public:
void push(T x) { // 入队
q1.push(x);
}
void pop() { // 出队
if (q1.empty()) return;
while (q1.size() > 1) {
q2.push(q1.front());
q1.pop(); }
q1.pop();
swap(q1, q2);
}
T front() { // 获取队头元素
if (q1.empty()) return NULL;
while (q1.size() > 1) {
q2.push(q1.front());
q1.pop();
}
T x = q1.front();
q2.push(x);
q1.pop();
swap(q1, q2);
return x;
}
};
```
阅读全文