队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。队列被用在不少地方,好比提交操做系统执行的一系列进程、打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客。下面就介绍了Python中队列的应用实战,须要的能够参考。前端
队列(queue)python
队列是先进先出(FIFO, First-In-First-Out)的线性表,在具体应用中一般用链表或者数组来实现,队列只容许在后端(称为rear)进行插入操做,在前端(称为front)进行删除操做,队列的操做方式和堆栈相似,惟一的区别在于队列只容许新数据在后端进行添加(摘录维基百科)。算法
如图所示后端
队列的接口数组
一个队列至少须要以下接口:数据结构
接口 | 描述 |
---|---|
add(x) | 入队 |
delete() | 出队 |
clear() | 清空队列 |
isEmpty() | 判断队列是否为空 |
isFull() | 判断队列是否未满 |
length() | 队列的当前长度 |
capability() | 队列的容量 |
然而在Python中,可使用collections模块下的deque函数,deque函数提供了队列全部的接口,那么先让我门看看队列deque函数提供了那些API把:app
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为负,向左旋转。 |
如今咱们在Python中测试下这些个API的使用吧。学习
入队操做测试
出队操做
其余的API
实例
二项式系数
题目
编写程序,求二项式系数表中(杨辉三角)第K层系列数
思路
解决代码
划分无冲突子集
题目
某动物园搬家,要运走N种动物,老虎与狮子放在一块儿会你们,大象与犀牛放在一个笼子会打架,野猪和野狗放在一个笼子里会打架,如今须要咱们设计一个算法,使得装进同一个笼子的动物互相不打架。
思路
解决代码
数字变换
题目
对于一对正整数a,b,对a只能进行加1,减1,乘2操做,问最少对a进行几回操做能获得b?
例如:
思路
本题用广度优先搜索,寻找a到b状态迁移最短路径,对于每一个状态s,能够转换到撞到s+1,s-1,s*2:
解决代码