在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是空的 #只要實現先進先出即可
實現棧、隊列時,一般是使用空列表[]。