编写循环队列算法
时间: 2023-07-24 15:15:49 浏览: 93
循环队列是一种特殊的队列,它可以在固定大小的数组上实现队列的所有操作。以下是循环队列的算法:
1. 初始化循环队列:
- 创建一个长度为 k 的数组,表示循环队列。
- 初始化队列头(front)和队列尾(rear)为 0。
2. 判断队列是否为空:
- 如果 front == rear,则队列为空。
3. 判断队列是否已满:
- 如果 (rear + 1) % k == front,则队列已满。
4. 入队操作:
- 如果队列未满,则将元素插入到队列尾(rear)位置。
- 将 rear 后移一位:rear = (rear + 1) % k。
5. 出队操作:
- 如果队列非空,则将队列头(front)位置的元素出队。
- 将 front 后移一位:front = (front + 1) % k。
6. 获取队列头元素:
- 如果队列非空,则返回队列头(front)位置的元素。
7. 获取队列长度:
- 队列长度为 (rear - front + k) % k。
以下是该算法的 Python 代码实现:
```python
class CircularQueue:
def __init__(self, k):
self.queue = [0] * k
self.k = k
self.front = 0
self.rear = 0
def is_empty(self):
return self.front == self.rear
def is_full(self):
return (self.rear + 1) % self.k == self.front
def enqueue(self, value):
if not self.is_full():
self.queue[self.rear] = value
self.rear = (self.rear + 1) % self.k
def dequeue(self):
if not self.is_empty():
value = self.queue[self.front]
self.front = (self.front + 1) % self.k
return value
def get_front(self):
if not self.is_empty():
return self.queue[self.front]
def get_length(self):
return (self.rear - self.front + self.k) % self.k
```
该算法的时间复杂度为 O(1)。
阅读全文