Python 实现循环队列:入队、出队算法及判断空满
class CircularQueue:
def __init__(self, size):
self.size = size
self.queue = [None] * size
self.front = 0
self.rear = 0
self.flag = 0
def is_empty(self):
return self.front == self.rear and self.flag == 0
def is_full(self):
return self.front == self.rear and self.flag == 1
def enqueue(self, item):
if self.is_full():
print('overflow')
else:
self.queue[self.rear] = item
self.rear = (self.rear + 1) % self.size
if self.front == self.rear:
self.flag = 1
def dequeue(self):
if self.is_empty():
print('Empty')
else:
item = self.queue[self.front]
self.front = (self.front + 1) % self.size
if self.front == self.rear:
self.flag = 0
return item
m = int(input())
elements = list(map(int, input().split()))
n = int(input())
queue = CircularQueue(m + 1)
for element in elements:
queue.enqueue(element)
for _ in range(n):
queue.dequeue()
if queue.is_empty():
print('Empty')
else:
while not queue.is_empty():
print(queue.dequeue())
代码说明:
- 使用标志位 flag 和 front、rear 指针来控制队列状态:
- 当 front=rear 且 flag=0 时,表示队列为空
- 当 front=rear 且 flag=1 时,表示队列已满
enqueue方法实现入队操作:- 判断队列是否已满,若已满则输出 'overflow';
- 将元素加入到队列尾部;
- 更新 rear 指针;
- 若入队后 front=rear,则设置 flag=1,表示队列已满。
dequeue方法实现出队操作:- 判断队列是否为空,若为空则输出 'Empty';
- 从队列头部取出元素;
- 更新 front 指针;
- 若出队后 front=rear,则设置 flag=0,表示队列为空。
- 主函数:
- 输入入队次数 m 和 m 个入队元素;
- 输入出队次数 n;
- 初始化循环队列,并执行 m 次入队操作;
- 执行 n 次出队操作;
- 判断队列是否为空,若为空则输出 'Empty',否则输出队列中剩余元素。
示例输入:
3
5 3 6
2
示例输出:
6
代码解析:
这段代码展示了如何使用 Python 实现一个循环队列,并提供了完整的入队和出队操作。循环队列是数据结构中一种常用的队列类型,它通过使用一个固定大小的数组来实现,并使用 front 和 rear 指针来指示队列的头部和尾部。通过循环的方式,可以利用数组的全部空间,避免内存浪费。
通过这个代码示例,我们可以更好地理解循环队列的实现原理,并将其应用于实际的编程场景中。
原文地址: https://www.cveoy.top/t/topic/vfx 著作权归作者所有。请勿转载和采集!