循环队列的基本操作的实现(初始化、入队、出队、求队列长度、取队头元素、判断队空、队列的遍历、清空队列、销毁队列等)
时间: 2024-12-06 10:24:53 浏览: 50
循环队列是一种特殊的线性表结构,其特点是队尾指针和队头指针可以同时达到数组的边界,形成循环。以下是循环队列的一些基本操作:
1. **初始化**:创建一个固定大小的数组作为队列,并初始化队头和队尾指针(head 和 tail),两者都指向数组的第一个位置,队列长度为0。
```c++
void init(int size) {
queue[0] = -1; // 使用特殊值表示队列为空
head = tail = 0;
capacity = size;
}
```
2. **入队(enqueue)**:当队尾满时,将队尾指针移动到下一个可用位置,如果已经到达数组边缘,则回到第一个位置,相当于完成了一次“循环”。
```c++
void enqueue(int value) {
if (tail == capacity - 1) {
tail = 0; // 如果尾部已满,设尾部等于0,进入下一轮循环
} else {
queue[tail++] = value;
}
}
```
3. **出队(dequeue)**:移除并返回队首元素,然后更新队头指针。如果队头为空,说明队列也为空。
```c++
int dequeue() {
if (head == tail) {
return -1; // 队列为空
}
int value = queue[head];
head++;
return value;
}
```
4. **求队列长度**:计算队尾和队头之间的距离,注意处理边界情况。
```c++
int length() {
if (head > tail) {
return capacity - head + tail; // 队列跨越了数组边界
} else {
return tail - head; // 非跨越边界的情况
}
}
```
5. **取队头元素(查看队头)**:类似出队操作,但不改变队列状态。
6. **判断队空**:检查队头是否等于队尾。
7. **队列遍历**:通常需要借助辅助栈或者递归实现,因为队列本身不支持双向访问。
8. **清空队列**:将队头和队尾指针都设置回初始位置。
9. **销毁队列**:释放分配给队列的所有内存。
阅读全文