python队列创建1、初始化、2、判断队列是否为空、3、取队头元素、4、入队、5、出队、6、输出从队头到队尾的元素。实现循环队列的各种基本运算,请将其中循环队列的基本运算实现。 并在主函数中测试算法的正确性
时间: 2024-10-12 21:04:56 浏览: 51
在Python中,我们可以使用内置的`collections`模块中的`deque`(双端队列)来创建循环队列,因为它允许我们在两端添加或删除元素,并且当一个队列满时可以从另一端开始,形成循环。以下是循环队列的实现:
```python
from collections import deque
class CircularQueue:
def __init__(self, capacity):
self.queue = deque(maxlen=capacity)
self.front = -1
self.rear = -1
# 判断队列是否为空
def is_empty(self):
return self.front == -1 and self.rear == -1
# 获取队头元素,如果队空则抛出异常
def get_front(self):
if self.is_empty():
raise IndexError("Queue is empty")
return self.queue[self.front]
# 入队(添加元素),先进先出原则
def enqueue(self, item):
if self.is_full():
raise IndexError("Queue is full")
if self.front == -1:
self.front = 0
self.rear = (self.rear + 1) % len(self.queue)
self.queue.append(item)
# 出队(移除元素)
def dequeue(self):
if self.is_empty():
raise IndexError("Queue is empty")
removed_item = self.get_front()
if self.rear == self.front:
self.front = -1
self.rear = -1
else:
self.front = (self.front + 1) % len(self.queue)
return removed_item
# 输出从队头到队尾的元素
def print_elements(self):
for i in range(len(self.queue)):
print(f"Element at position {i}: {self.queue[(self.front + i) % len(self.queue)]}")
# 判断队列是否已满
def is_full(self):
return len(self.queue) == self.queue.maxlen
# 测试循环队列
def test_circular_queue():
cq = CircularQueue(5)
cq.enqueue(1)
cq.enqueue(2)
cq.enqueue(3)
cq.enqueue(4)
cq.print_elements() # 输出: Element at position 0: 1, Element at position 1: 2, Element at position 2: 3, Element at position 3: 4
assert cq.dequeue() == 1
cq.print_elements() # 输出: Element at position 0: 2, Element at position 1: 3, Element at position 2: 4
test_circular_queue()
```
在这个实现中,我们首先检查队列是否为空或已满,然后执行相应的操作。主函数`test_circular_queue()`展示了如何创建并使用循环队列。
阅读全文