实现一个循环队列及其基本功能
时间: 2023-06-23 22:10:13 浏览: 95
循环队列是一种使用循环数组实现的队列。它具有固定大小,当元素填满数组时,它可以覆盖之前的元素。循环队列的基本功能包括入队、出队、判断队列是否为空、判断队列是否已满、获取队首元素、获取队列长度等。
以下是一个简单的循环队列的实现,包括基本功能的实现:
```python
class CircularQueue:
def __init__(self, k: int):
self.queue = [None] * k
self.head = 0
self.tail = 0
self.size = 0
self.k = k
def enqueue(self, value: int) -> bool:
if self.is_full():
return False
self.queue[self.tail] = value
self.tail = (self.tail + 1) % self.k
self.size += 1
return True
def dequeue(self) -> bool:
if self.is_empty():
return False
self.queue[self.head] = None
self.head = (self.head + 1) % self.k
self.size -= 1
return True
def is_empty(self) -> bool:
return self.size == 0
def is_full(self) -> bool:
return self.size == self.k
def get_front(self) -> int:
if self.is_empty():
return -1
return self.queue[self.head]
def get_rear(self) -> int:
if self.is_empty():
return -1
return self.queue[self.tail - 1]
def get_size(self) -> int:
return self.size
```
在上面的代码中,我们使用了一个长度为 k 的列表来实现循环队列。通过维护头部指针 head 和尾部指针 tail,我们可以确定队列的位置。我们还使用 size 来跟踪队列中的元素数量。enqueue 和 dequeue 操作分别向队列中添加和移除元素,并且它们都可以在 O(1) 的时间内完成。其他操作也都可以在 O(1) 时间内完成。
使用示例:
```python
# 创建一个长度为 3 的循环队列
cq = CircularQueue(3)
# 入队
cq.enqueue(1)
cq.enqueue(2)
cq.enqueue(3)
# 获取队列长度
assert cq.get_size() == 3
# 判断队列是否已满
assert cq.is_full() == True
# 尝试入队,但队列已满,返回 False
assert cq.enqueue(4) == False
# 出队
cq.dequeue()
# 获取队首元素
assert cq.get_front() == 2
# 获取队尾元素
assert cq.get_rear() == 3
# 判断队列是否为空
assert cq.is_empty() == False
# 全部出队
cq.dequeue()
cq.dequeue()
# 判断队列是否为空
assert cq.is_empty() == True
```
阅读全文