一、基本概念
1.定义:队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”。
2.特点:
1、队列只能在队头和队尾进行数据操作
2、栈模型具有先进先出或者叫做后进后出的规律
二、代码实现
主要使用队列的顺序储存
思路分析:
- 通过环形队列,如下图
- 环形队列:当队尾指针 front == Maxsize + 1 时,再前进一个位置就自动到0
- 队首指针前进1:front = (front + 1) % Maxsize
- 队尾指针前进1:rear = (rear + 1) % Maxsize
- 队空条件:rear == front
- 队满条件:(rear + 1) % Maxsize == front
- 通过封装规定队头和队尾操作
# __author__: PPPsych
# date: 2021/1/6
class Queue:
def __init__(self, size):
self.queue = [0 for _ in range(size)]
self.size = size
self.rear = 0 # 队尾指针
self.front = 0 # 队首指针
# 是否对空
def is_empty(self):
return self.rear == self.front
# 是否队满
def is_filled(self):
return (self.rear + 1) % self.size == self.front
# 进队
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!')
q = Queue(5)
for i in range(4):
q.push(i)
print(q.pop())
————————————————————————————————————————————————————————————————————
输出:
0
三、deque模块
deque模块是python标准库collections中的一项,它提供了两端都可以操作的序列,这意味着,在序列的前后你都可以执行添加或删除操作。
1.创建deque序列:
from collections import deque
d=deque()
2.deque提供了类似list的操作方法:
d=deque()
d.append(3)
d.append(8)
d.append(1)
那么此时d=deque([3,8,1]),len(d)=3,d[0]=3,d[-1]=1
3.两端都使用pop:
d=deque(‘12345’)
那么d=deque(['1', '2', '3', '4', '5'])
d.pop()抛出的是’5’,d.leftpop()抛出的是’1’,可见默认pop()抛出的是最后一个元素。
4.限制deque的长度
d=deque(maxlen=20)
for i in range(30):
d