向标准队列中添加元素时,元素从尾部入队,从头部出队。采用FIFO机制。而双向队列支持从任意一端增加和删除元素。
python标准库中通过Deque类实现了双向对列,除了提供标准方法外,还提供appendleft(),pop()。
通过两个栈实现一个对列
一个栈做头用于提取数据,一个栈做尾用于插入数据,当头栈为空时,与尾栈交换。
class MyQueue:
def __init__(self):
self.in_stack = []
self.out_stack = []
def __len__(self):
return len(self.in_stack) + len(self.out_stack)
def push(self, obj):
self.in_stack.append(obj)
def pop(self):
if not self.out_stack:
self.out_stack = self.in_stack[::-1]
self.in_stack = []
return self.out_stack.pop()
Deque类
通过Deque类创建双向列表
import collections
q = collections.deque()
特殊用法
把最右边元素放到左边
import collections
q = collections.deque()
q.extend(['a','b','c','d','e'])
q.rotate(2) #指定次数,默认1次
print(q)
out:deque(['d', 'e', 'a', 'b', 'c'])
从队列左边扩展一个列表的元素
import collections
q= collections.deque()
q.append(1)
q.extendleft([2,3,4])
print(q)
out:deque([4, 3, 2, 1])