写一段代码,充分利用顺序存储的循环队列的空间,实现队头离队,队尾排队的功能
时间: 2024-11-15 11:23:07 浏览: 23
在利用顺序存储的循环队列(Circular Queue)中,队头和队尾的指针通常用于标识队列的起始位置和结束位置。这里是一个基本的C++示例,使用数组来表示队列,并通过两个索引来跟踪队首和队尾:
```cpp
#include <iostream>
class CircularQueue {
private:
int capacity; // 队列容量
int front; // 队头元素的索引
int rear; // 队尾元素的索引
// 数组用于存储数据
int queue[CAPACITY]; // 假设CAPACITY已初始化
public:
CircularQueue(int size) : capacity(size), front(0), rear(0) {}
// 检查队列是否为空
bool isEmpty() const {
return front == rear;
}
// 检查队列是否满
bool isFull() const {
return (rear + 1) % capacity == front;
}
// 入队操作 (如果空间不够会丢失旧元素)
void enqueue(int value) {
if (isFull()) {
std::cout << "Queue is full, unable to enqueue.\n";
return;
}
queue[rear] = value;
rear = (rear + 1) % capacity; // 循环更新 rear
}
// 出队操作 (队头元素移除并返回)
int dequeue() {
if (isEmpty()) {
std::cout << "Queue is empty, unable to dequeue.\n";
return -1; // 返回特殊值表示错误
}
int removedValue = queue[front];
front = (front + 1) % capacity; // 更新 front
return removedValue;
}
};
int main() {
CircularQueue cq(5);
cq.enqueue(1); // 入队
cq.enqueue(2);
cq.enqueue(3);
std::cout << "Dequeueing...\n";
int dequeued = cq.dequeue();
std::cout << "Dequeued element: " << dequeued << "\n";
return 0;
}
```
在这个例子中,我们创建了一个`enqueue`方法将元素添加到队尾,如果队列已满则提示无法入队。同样,`dequeue`方法从队头取出并返回元素,如果队列为空则提示无法出队。
阅读全文