队列Queue是一种先进先出FIFO(first in first out)的排列方式,就和排队入场是一样的。
而双端队列deque 即队伍的头尾可以互换,两端既可以进也可以出。
在Python中常用的有两种实现队列的方法:
一、列表List方法
append():从右端进入
pop(0):从左端出(需要注意pop()默认是从右端出,这样就不符合FIFO了)
s = ['a', 'b', 'c']
s.append('d')
s.pop(0)
print(s)-------------->['b', 'c', 'd']
由于List的删除方式pop(0)需要后面所有元素向前补齐一位,算法效率较低。而第二种方法可以有效的避免这个问题。
二、调用deque方法
append():从右端进入
pop():从右端出
appendleft():从左端进入
popleft():从左端出
可以看出要满足FIFO条件,append()和popleft()通常一起使用(右进左出),appendleft()和pop()通常一起使用(左进右出)。
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('d')
q.popleft()
print(q)---------------->deque(['b', 'c', 'd'])
三、复杂度
访问Access:O(N)
搜索Search:O(N)
插入Insert:O(1)
删除Remove:O(1)