循环队列的初始化入队列出队列遍历求队列的长度完整代码C++语言
时间: 2024-12-14 10:18:46 浏览: 3
循环队列是一种特殊的线性表结构,它通过队头和队尾指针在内存的一段连续区域上实现,当队尾指针到达数组的结尾时,会开始覆盖队头,形成一个循环。以下是C++中循环队列的基本操作(初始化、入队、出队、遍历和获取长度)的一个简单实现:
```cpp
#include <iostream>
using namespace std;
template <typename T>
class CircularQueue {
private:
int capacity; // 队列容量
int front; // 队头位置
int rear; // 队尾位置
T* queue; // 存储数据的动态数组
public:
// 构造函数,初始化队列
CircularQueue(int size) {
capacity = size;
front = rear = -1;
queue = new T[capacity];
}
~CircularQueue() {
delete[] queue;
}
// 入队操作
void enqueue(T value) {
if (isFull()) {
cout << "Queue is full.\n";
return;
}
rear = (rear + 1) % capacity;
queue[rear] = value;
}
// 出队操作
T dequeue() {
if (isEmpty()) {
cout << "Queue is empty.\n";
return T();
}
T item = queue[front];
front = (front + 1) % capacity;
return item;
}
// 遍历队列
void display() {
if (isEmpty()) {
cout << "Queue is empty.\n";
return;
}
for (int i = front; i != rear; i = (i + 1) % capacity) {
cout << queue[i] << " ";
}
// 如果队列未满,则打印最后一个元素
if (front == rear) {
cout << queue[front] << endl;
} else {
cout << endl;
}
}
// 判断队列是否为空
bool isEmpty() const {
return front == rear;
}
// 判断队列是否已满
bool isFull() const {
return rear == (front + capacity - 1) % capacity;
}
// 获取队列长度
int size() const {
if (isEmpty()) {
return 0;
}
return rear > front ? rear - front : capacity - front;
}
};
int main() {
CircularQueue<int> cq(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.size() << endl; // 输出: Queue length: 2
return 0;
}
```
上述代码定义了一个名为`CircularQueue`的模板类,包含了基本的队列操作,并在`main`函数中进行了演示。注意,在实际项目中,异常处理等细节需要进一步完善。
阅读全文