循环队列的入队出队代码实现
时间: 2024-08-13 14:04:48 浏览: 47
循环队列是一种特殊的队列数据结构,它通过数组实现,具有队头和队尾两个指针,当队列满时,新的元素会从数组的第一个位置开始添加,形成一个环形。以下是一个简单的循环队列的入队(enqueue)和出队(dequeue)操作的伪代码实现:
```cpp
// 定义循环队列
template <typename T>
class CircularQueue {
private:
int front, rear; // 队头和队尾指针
int size; // 队列容量
T* buffer; // 存储元素的数组
public:
// 构造函数
CircularQueue(int capacity) {
front = rear = -1;
size = capacity;
buffer = new T[size];
}
// 出队
bool dequeue(T& value) {
if (isEmpty()) return false; // 如果队列为空,返回false
value = buffer[rear]; // 获取队尾元素
rear = (rear + 1) % size; // 更新队尾指针,注意模运算防止溢出
if (rear == front) resize(); // 队尾等于队头,说明队列已空,resize以适应
return true;
}
// 入队
bool enqueue(const T& value) {
if (isFull()) return false; // 如果队列已满,返回false
rear = (rear + 1) % size; // 如果队尾满,移动到队头
buffer[front] = value; // 将新元素存入队首
if (front == rear) resize(); // 队列满,resize以适应
return true;
}
// 判断队列是否为空/满
bool isEmpty() const { return front == rear; }
bool isFull() const { return (rear + 1) % size == front; }
// 队列扩容
void resize() {
T* newBuffer = new T[2 * size]; // 新建两倍容量的数组
for (int i = front; i != rear; i = (i + 1) % size) {
newBuffer[i] = buffer[i];
}
delete[] buffer;
front = rear = 0;
buffer = newBuffer;
}
// 销毁队列
~CircularQueue() {
delete[] buffer;
}
};
```
阅读全文