使用C++实现循环队列的初始化入队出队遍历求队列长度并输出完整代码
时间: 2024-12-14 07:24:43 浏览: 12
在C++中,循环队列(Circular Queue)是一种特殊的线性表,它在队列的两端添加和删除元素,可以避免在数组末尾插入和移除元素可能导致的频繁数组扩容和收缩操作。下面是循环队列的基本实现,包括初始化、入队、出队、遍历以及计算队列长度:
```cpp
#include <iostream>
using namespace std;
template <typename T>
class CircularQueue {
private:
int front, rear; // 前端指针和后端指针
int capacity; // 队列容量
T* queue; // 存储数据的动态数组
public:
// 初始化函数
CircularQueue(int size) {
if (size <= 0) {
cout << "Error: Queue capacity must be positive." << endl;
return;
}
front = rear = -1;
capacity = size;
queue = new T[capacity];
}
// 入队操作
void enqueue(T item) {
if ((rear + 1) % capacity == front) { // 判断队满
cout << "Error: Queue is full." << endl;
return;
}
rear = (rear + 1) % capacity; // 循环更新后端指针
queue[rear] = item;
cout << "Enqueued: " << item << endl;
}
// 出队操作
void dequeue() {
if (front == -1) { // 判断队空
cout << "Error: Queue is empty." << endl;
return;
}
front = (front + 1) % capacity; // 更新前端指针
cout << "Dequeued: " << queue[front] << endl;
}
// 遍历队列
void display() {
if (isEmpty()) {
cout << "Queue is empty." << endl;
} else {
for (int i = front; i != rear; i = (i + 1) % capacity) {
cout << queue[i] << " ";
}
cout << queue[front] << endl; // 因为循环队列的最后一个元素会和第一个元素相连,这里需要单独打印
}
}
// 检查队列是否为空
bool isEmpty() const {
return front == -1;
}
// 获取队列长度
int getLength() const {
if (isEmpty()) {
return 0;
}
return (rear + 1) % capacity - front;
}
// 释放内存
~CircularQueue() {
delete[] queue;
}
};
// 示例
int main() {
CircularQueue<int> cq(5); // 创建一个容量为5的循环队列
cq.enqueue(1);
cq.enqueue(2);
cq.enqueue(3);
cq.display(); // 输出: 1 2 3
cq.dequeue();
cq.display(); // 输出: 2 3
cout << "Queue length: " << cq.getLength() << endl; // 输出: 2
return 0;
}
```
阅读全文