循环队列(Circular Queue),又称环形缓冲区,是一种常用的数据结构,特别适用于资源有限的场合,比如操作系统中的任务调度、网络数据缓冲等。循环队列在数组的基础上实现,逻辑上首尾相连,能够充分利用数组空间。
下面是一个用C++实现的循环队列示例:
#include <iostream>
using namespace std;
class CircularQueue {
private:
int *queue;
int front;
int rear;
int size;
int capacity;
public:
CircularQueue(int k) {
capacity = k + 1; // 多一个空间用于区分队列满和空
queue = new int[capacity];
front = 0;
rear = 0;
size = 0;
}
~CircularQueue() {
delete[] queue;
}
bool enqueue(int value) {
if (isFull()) {
cout << "Queue is full" << endl;
return false;
}
queue[rear] = value;
rear = (rear + 1) % capacity;
size++;
return true;
}
bool dequeue() {
if (isEmpty()) {
cout << "Queue is empty" << endl;
return false;
}
front = (front + 1) % capacity;
size--;
return true;
}
int Front() {
if (isEmpty()) {
cout << "Queue is empty" << endl;
return -1;
}
return queue[front];
}
int Rear() {
if (isEmpty()) {
cout << "Queue is empty" << endl;
return -1;
}
return queue[(rear - 1 + capacity) % capacity];
}
bool isEmpty() {
return size == 0;
}
bool isFull() {
return size == capacity - 1;
}
int getSize() {
return size;
}
};
int main() {
CircularQueue cq(5); // 创建容量为5的循环队列
cq.enqueue(10);
cq.enqueue(20);
cq.enqueue(30);
cq.enqueue(40);
cq.enqueue(50);
cout << "Front element: " << cq.Front() << endl; // 输出队首元素
cout << "Rear element: " << cq.Rear() << endl; // 输出队尾元素
cq.dequeue();
cq.dequeue();
cout << "After dequeuing two elements:" << endl;
cout << "Front element: " << cq.Front() << endl; // 输出队首元素
cout << "Rear element: " << cq.Rear() << endl; // 输出队尾元素
return 0;
}
这个示例中,CircularQueue
类实现了一个循环队列,支持以下操作:
enqueue(int value)
:向队列尾部添加一个元素。dequeue()
:从队列头部移除一个元素。Front()
:获取队首元素。Rear()
:获取队尾元素。isEmpty()
:检查队列是否为空。isFull()
:检查队列是否已满。getSize()
:获取当前队列中的元素个数。
循环队列的实现利用数组和两个指针(front
和 rear
)来追踪队首和队尾的位置,通过取模操作来实现首尾相连的效果。