队列
队列(Queue)是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除。
进行插入的一端称为队尾(rear),插入动作称为进队或入队
进行删除的一端称为队头(front),删除动作称为出队
队列的性质:先进先出(First-in, First-out)
为了让队列可以循环使用,这里我们提出了环形队列
环形队列:
当队首指针front == Maxsize - 1时, 再前进一个位置就自动到0.
- 队首指针前进1: front = (front + 1) % MaxSize
- 队尾指针前进1: rear = (rear + 1) % MaxSize
- 队空条件: rear == front
- 队满条件: (rear + 1) % MaxSize == front
'''
TOPIC: 队列Queue
author: Blue
time: 2020-08-11
QQ: 2458682080
'''
class Queue:
def __init__(self, size=100):
self.queue = [0 for _ in range(size)]
self.size = size
self.rear = 0 # 队尾指针
self.front = 0 # 队首指针
def push(self, element):
if not self.is_filled():
self.rear = (self.rear + 1) % self.size
self.queue[self.rear] = element
else:
raise IndexError("Queue is filled.")
def pop(self):
if not self.is_empty():
self.front = (self.front + 1) % self.size
return self.queue[self.front]
else:
raise IndexError("Queue is empty.")
# 判断队空
def is_empty(self):
return self.rear == self.front
# 判断队满
def is_filled(self):
return (self.rear + 1) % self.size == self.front
q = Queue(5)
for i in range(4):
q.push(i)
print(q.is_filled())
print(q.pop())
q.push(4)
结果:
True
0
有兴趣的读者也可以试试Python的内置队列模块deque
from collections import deque