简介
队列是一个数据集合,只允许在一端进行插入,另一端进行删除。
进行插入的一端称为队尾(rear),插入动作称为进队。
进行删除的一端称为队头(front),删除动作称为出队。
队列的性质:先进先出(First in, First out)。
队列的实现方式——环形队列
环形队列:当队尾指针front == Maxsize + 1时,再前进一个位置就自动到0.
队首指针前进1:front = (front + 1) % Maxsize
队尾指针前进1:rear = (reat + 1) % Maxsize
队空条件: rear = front
队满条件:(rear + 1) % Maxsize = front
class Queue:
def __init__(self, size=100):
self.queue = [o for _ in range(size)]
self.rear = 0 # 队尾
self.front = 0 # 队首
def push(self, val):
if not self.full():
self.rear = (self.rear + 1) % self.size
self.queue[self.rear] = val
else:
raise IndexError("Queue is full)
def pop(self):
if not self.is_empty():
self.front = (self.fron + 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_full(self):
return (self.rear + 1) % self.size == self.front
双向队列
双向队列的两段都可以进队和出队
基本操作:
(1)队首进队
(2)队首出队
(3)队尾进队
(4)队尾出队
Python内置队列模块
from cllections import deque
# 单向队列使用
queue = deque()
queue.append(1) #队尾进队
queue.popleft() #队首出队
# 双向队列
queue.appendleft(1) #队首进队
queue.pop() #队尾出队