python中實現棧的三種方法
阿新 • • 發佈:2020-12-21
棧是一種線性資料結構,用先進後出或者是後進先出的方式儲存資料,棧中資料的插入刪除操作都是在棧頂端進行,常見棧的函式操作包括
- empty()– 返回棧是否為空 – Time Complexity : O(1)
- size()–返回棧的長度 – Time Complexity : O(1)
- top()– 檢視棧頂元素 – Time Complexity : O(1)
- push(g)– 向棧頂新增元素 – Time Complexity : O(1)
- pop()– 刪除棧頂元素 – Time Complexity : O(1)
python中棧可以用以下三種方法實現:
1)list
2)collections.deque
3)queue.LifoQueue
使用列表實現棧
python的內建資料結構list可以用來實現棧,用append()向棧頂新增元素,pop() 可以以後進先出的順序刪除元素
但是列表本身有一些缺點,主要問題就是當列表不斷擴大的時候會遇到速度瓶頸.列表是動態陣列,因此往其中新增新元素而沒有空間儲存新的元素時,它會自動重新分配記憶體塊,並將原來的記憶體中的值複製到新的記憶體塊中.這就導致了一些append()操作會消耗更多的時間
>>> stack = [] >>> #append() fuction to push ... #element in list ... >>> stack.append('hello') >>> stack.append('world') >>> stack.append('!') >>> print('Initial stack') Initial stack >>> print(stack) ['hello','world','!'] >>> #pop() function to pop element ... #from stack in LIFO order ... >>> print('\nElement poped from stack') Element poped from stack >>> print(stack.pop()) ! >>> print(stack.pop()) world >>> print(stack.pop()) hello >>> print('\nStack after all elements are poped') Stack after all elements are poped >>> print(stack) []
使用collections.deque實現棧
python中棧也可以用deque類實現,當我們想要在實現在容器兩端更快速地進行append和pop操作時,deque比列表更合適.deque可以提供O(1)時間的append和pop操作,而列表則需要O(n)時間.
>>> from collections import deque >>> stack = deque() >>> # append() fuction to push ... #element in list ... >>> stack.append('hello') >>> stack.append('world') >>> stack.append('!') >>> print('Initial stack') Initial stack >>> print(stack) deque(['hello','!']) >>> #pop() function to pop element ... #from stack in LIFO order ... >>> print('\nElement poped from stack') Element poped from stack >>> print(stack.pop()) ! >>> print(stack.pop()) world >>> print(stack.pop()) hello >>> print('\nStack after all elements are poped') Stack after all elements are poped >>> print(stack)deque([])
使用queue module實現棧
Queue模組有LIFO queue,也就是棧結構.用put()和get()操作從Queue中新增和獲得資料
>>> from queue import LifoQueue >>> stack = LifoQueue(maxsize = 3) >>> print(stack.qsize()) 0 >>> stack.put('hello') >>> stack.put('world') >>> stack.put('!') >>> print('\nElement poped from stack') Element poped from stack >>> print(stack.get()) ! >>> print(stack.get()) world >>> print(stack.get()) hello >>> print('\nEmpty:',stack.empty()) Empty: True
以上就是python中實現棧的三種方法的詳細內容,更多關於python 實現棧的資料請關注我們其它相關文章!