数据结构循环队列 对数组进行暂存 并且实现求队列长度 入队 出队 遍历 取队头的操作
时间: 2024-11-29 11:36:07 浏览: 4
循环队列是一种特殊的线性表数据结构,它通过将队列的头部和尾部相连,使得当队列满时,新的元素添加到尾部,而旧的元素从头部删除,形成一种“头进尾出”的循环效果。在数组中实现循环队列,通常涉及到以下操作:
1. **队列长度**:在循环队列中,计算长度时需要注意边界条件。如果你有一个固定大小的数组作为队列容器,你可以维护两个指针:`front`表示队首元素的下一个位置,`rear`表示最后一个添加元素的位置。如果`rear - front`超过数组大小减一(因为`front == rear`时,表示队列为空),则实际队列长度为`(array_size - (front - rear)) % array_size`。
2. **入队(enqueue)**:当有新元素需要加入时,先检查队列是否已满。若未满,则将新元素放在`rear`位置,并更新`rear`指针。如果已满,则移动`front`指针,直到找到空位。
3. **出队(dequeue)**:取队首元素时,同样判断队列是否为空。非空则返回`front`处的元素,然后将`front`向后移动一位;如果队列为空,直接返回特殊值(如`None`)。
4. **遍历**:可以通过一个for循环或while循环,从`front`开始逐个访问每个元素,直到遇到`front == rear`的情况。
5. **取队头(peek)**:队头是指当前队列中第一个元素,但是不会移除它。所以队头位置是`front`,可以直接读取,不需要特殊处理。
下面是Python代码示例:
```python
class CircularQueue:
def __init__(self, capacity):
self.queue = [0] * capacity
self.front = -1
self.rear = -1
# 添加元素
def enqueue(self, value):
if self.is_full():
return False
if self.is_empty():
self.front = 0
else:
self.rear = (self.rear + 1) % len(self.queue)
self.queue[self.rear] = value
return True
# 删除元素
def dequeue(self):
if self.is_empty():
return None
removed_value = self.queue[self.front]
if self.front == self.rear:
self.front = self.rear = -1
else:
self.front = (self.front + 1) % len(self.queue)
return removed_value
# 返回队列长度
def length(self):
if self.is_empty():
return 0
elif self.front > self.rear:
return len(self.queue) - (self.front - self.rear)
else:
return self.rear - self.front + 1
# 判断队列是否为空
def is_empty(self):
return self.front == -1
# 判断队列是否已满
def is_full(self):
return self.length() == len(self.queue)
# 使用示例
cq = CircularQueue(5)
cq.enqueue(1)
cq.enqueue(2)
print(cq.dequeue()) # 输出:1
print(cq.length()) # 输出:1
```
阅读全文