队列(queue),是先进先出(FIFO, First-In-First-Out)的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端(称为rear)进行插入操作,
在前端(称为front)进行删除操作,队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。
队列的接口
一个队列至少需要如下接口:
接口 | 描述 |
---|---|
add(x) | 入队 |
delete() | 出队 |
clear() | 清空队列 |
isEmpty() | 判断队列是否为空 |
isFull() | 判断队列是否未满 |
length() | 队列的当前长度 |
capability() | 队列的容量 |
python中内置双向队列模块:
collections.deque是双端队列,即左右两边都是可进可出的
方法 | 描述 |
---|---|
append(x) | 在队列的右边添加一个元素 |
appendleft(x) | 在队列的左边添加一个元素 |
clear() | 从队列中删除所有元素 |
copy() | 返回一个浅拷贝的副本 |
count(value) | 返回值在队列中出现的次数 |
extend([x..]) | 使用可迭代的元素扩展队列的右侧 |
extendleft([x..]) | 使用可迭代的元素扩展队列的右侧 |
index(value, [start, [stop]]) | 返回值的第一个索引,如果值不存在,则引发ValueError。 |
insert(index, object) | 在索引之前插入对象 |
maxlen | 获取队列的最大长度 |
pop() | 删除并返回最右侧的元素 |
popleft() | 删除并返回最左侧的元素 |
remove(value) | 删除查找到的第一个值 |
reverse() | 队列中的所有元素进行翻转 |
rotate() | 向右旋转队列n步(默认n = 1),如果n为负,向左旋转。 |
from collections import deque
q = deque([1,2,3,4,5],5)
q.append(6) #对尾进队
print(q.popleft()) #对首出队