用vs编写一个循环队列
时间: 2023-09-17 18:13:54 浏览: 121
好的,以下是用 C++ 编写的循环队列示例代码:
```c++
#include <iostream>
using namespace std;
class CircularQueue {
private:
int *queue; // 队列数组指针
int front; // 队首索引
int rear; // 队尾索引
int size; // 队列大小
public:
CircularQueue(int k) { // 构造函数,初始化队列
queue = new int[k];
front = 0;
rear = -1;
size = k;
}
bool enqueue(int value) { // 入队操作
if (isFull()) { // 队列已满,入队失败
return false;
}
rear = (rear + 1) % size;
queue[rear] = value;
return true;
}
bool dequeue() { // 出队操作
if (isEmpty()) { // 队列为空,出队失败
return false;
}
front = (front + 1) % size;
return true;
}
int frontValue() { // 获取队首元素
if (isEmpty()) {
return -1;
}
return queue[front];
}
int rearValue() { // 获取队尾元素
if (isEmpty()) {
return -1;
}
return queue[rear];
}
bool isEmpty() { // 判断队列是否为空
return front == (rear + 1) % size;
}
bool isFull() { // 判断队列是否已满
return front == (rear + 2) % size;
}
};
int main() {
CircularQueue q(5); // 创建大小为 5 的循环队列
q.enqueue(1); // 入队 1
q.enqueue(2); // 入队 2
q.enqueue(3); // 入队 3
q.enqueue(4); // 入队 4
q.enqueue(5); // 入队 5,此时队列已满,入队失败
cout << q.frontValue() << endl; // 输出队首元素,即 1
q.dequeue(); // 出队,队列中元素变为 2,3,4,5
cout << q.frontValue() << endl; // 输出队首元素,即 2
cout << q.rearValue() << endl; // 输出队尾元素,即 5
return 0;
}
```
这个循环队列的实现采用了“队首指针指向队列第一个元素的前一个位置,队尾指针指向队列最后一个元素”的方式,这样可以方便地判断队列是否为空或已满。在入队操作中,先将队尾指针加一,然后将元素插入到队尾指向的位置;在出队操作中,先将队首指针加一,然后将队首指向的元素删除。同时,队列大小为 k 时,队列中最多可以存储 k-1 个元素,因此在判断队列是否已满时需要将队首指针减一后再与队尾指针比较。
阅读全文