在python中,列表既可以作为栈使用,又可以作为队列使用。
把列表作为栈使用
栈:后进先出
stack=[1,2,3] stack.append(4) #入栈,以列表尾部为栈顶 print(stack.pop()) #出栈 4 print(stack) #[1, 2, 3]
把列表作为队列使用
队列:先进先出
from collections import deque list=[1,2,3] queue=deque(list) #将列表转换为队列 queue.append(0) #入队,添加到队列尾部 print(queue.popleft()) #出队,弹出并返回队首元素 print(queue) #deque([2, 3, 0]) #把列表作为队列使用,效率不高,因为出队时要移动后面所有的元素。
deque
deque 是双边队列,同时具有栈和队列的性质,可进行栈、队列相关的操作。并且还在在 list 的基础上增加了移动、旋转和增删等操作。
from collections import deque #需要导入模块 list=[1,2,3] deque=deque(list) #将列表转换为deque deque.append(4) #添加到尾部 print(deque) #deque([1, 2, 3, 0]) deque.appendleft(0) #添加到首部 print(deque) #deque([0, 1, 2, 3, 4]) print(deque.pop()) #弹出并返回最后一个元素 4 print(deque) #deque([0, 1, 2, 3]) print(deque.popleft()) #弹出并返回左边第一个元素 0 print(deque) #deque([1, 2, 3])
deque实现栈:
from collections import deque #需要导入模块 list=[1,2,3] deque=deque(list) #将列表转换为deque #作为栈使用:方式一 deque.append(4) #入栈 print(deque) #deque([1, 2, 3, 4]) print(deque.pop()) #出栈 4 print(deque) #deque([1, 2, 3]) #作为栈使用:方式二 deque.appendleft(0) #入栈 print(deque) #deque([0,1, 2, 3]) print(deque.pop()) #出栈 3 print(deque) #deque([0, 1, 2]) #只要实现后进先出即可
deque实现队列:
from collections import deque #需要导入模块 list=[1,2,3] deque=deque(list) #将列表转换为deque #作为队列使用:方式一 deque.append(4) #入队 print(deque) #deque([1, 2, 3, 4]) print(deque.popleft()) #出队 1 print(deque) #deque([2, 3, 4])
from collections import deque #需要导入模块 list=[] #空列表 deque=deque(list) #作为队列使用:方式二 deque.appendleft(1) #入队 deque.appendleft(2) print(deque) #deque([2, 1]) print(deque.pop()) #出队 1 print(deque) #deque([2]) #这种方式需要list是空的 #只要实现先进先出即可
实现栈、队列时,一般是使用空列表[]。