栈
python 的列表就帮我们实现了栈
- 栈的创建:即创建列表
- 栈的销毁:即销毁列表对象
del list
- 栈的清空:即清空列表中所有的元素
list.clear()
- 入栈: 即添加元素
list.appedn(元素)
- 出栈:即删除元素
list.pop()
这里主要来说用两个栈实现自定义队列和用deque类实现双向队列
- 自定义队列思路
1.一个栈作为头部出队,一个栈作为尾部入队
2.当头部栈为空时,头部和尾部栈互换
代码实现:
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,element):
self.in_stack.append(element)
def pop(self):
if not self.out_stack:
self.out_stack = self.in_stack[::-1]
self.in_stack = []
return self.out_stack.pop()
my_queue = MyQueue()
my_queue.push(20)
print(len(my_queue)) # 1
print(my_queue.pop()) # 20
deque 类实现双向队列 创建固定大小队列 如过超出范围,旧的值就会消失掉 d = deque(maxlen=n) 代码实现
from collections import deque
# 创建一个固定大小双向队列 d1
d1 = deque(maxlen=5)
# 创建一个非固定大小双向队列 d2
d2 = deque()
关于双向队列的方法
- append() 右入队
- appendleft() 左入队
- pop() 右出队
- popleft() 左出队
- count(ele) 统计 元素 ele 的个数
- reverse() 队列反转
- extend() 右扩展
- extendleft() 左扩展
扩展注意事项:右扩展和列表一样,左扩展 是反过来后合并扩展 代码实例
d = deque(maxlen=5)
d.extend([1,2,3])
print(d)
d.extendleft([4,5])
print(d)
结果
deque([1, 2, 3], maxlen=5)
deque([5, 4, 1, 2, 3], maxlen=5)