python中實現(xiàn)棧的三種方法
棧是一種線性數(shù)據(jù)結(jié)構(gòu),用先進(jìn)后出或者是后進(jìn)先出的方式存儲數(shù)據(jù),棧中數(shù)據(jù)的插入刪除操作都是在棧頂端進(jìn)行,常見棧的函數(shù)操作包括
- 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中??梢杂靡韵氯N方法實現(xiàn):
1)list
2)collections.deque
3)queue.LifoQueue
使用列表實現(xiàn)棧
python的內(nèi)置數(shù)據(jù)結(jié)構(gòu)list可以用來實現(xiàn)棧,用append()向棧頂添加元素, pop() 可以以后進(jìn)先出的順序刪除元素
但是列表本身有一些缺點,主要問題就是當(dāng)列表不斷擴(kuò)大的時候會遇到速度瓶頸.列表是動態(tài)數(shù)組,因此往其中添加新元素而沒有空間保存新的元素時,它會自動重新分配內(nèi)存塊,并將原來的內(nèi)存中的值復(fù)制到新的內(nèi)存塊中.這就導(dǎo)致了一些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實現(xiàn)棧
python中棧也可以用deque類實現(xiàn),當(dāng)我們想要在實現(xiàn)在容器兩端更快速地進(jìn)行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', '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)deque([])
使用queue module實現(xiàn)棧
Queue模塊有LIFO queue,也就是棧結(jié)構(gòu).用put()和get()操作從Queue中添加和獲得數(shù)據(jù)
>>> 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中實現(xiàn)棧的三種方法的詳細(xì)內(nèi)容,更多關(guān)于python 實現(xiàn)棧的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python + winrm 實現(xiàn)遠(yuǎn)程連接Windows服務(wù)器并執(zhí)行指定命令的操作過程
Windows遠(yuǎn)程管理(WinRM)是Windows Server 2003 R2,Windows Vista和Windows Server 2008中一種新式的方便遠(yuǎn)程管理的服務(wù),這篇文章主要介紹了python + winrm 實現(xiàn)遠(yuǎn)程連接Windows服務(wù)器并執(zhí)行指定命令的操作過程,需要的朋友可以參考下2023-10-10
Python 3.6 -win64環(huán)境安裝PIL模塊的教程
PIL功能非常強(qiáng)大,但API卻非常簡單易用。這篇文章主要介紹了Python 3.6 -win64環(huán)境安裝PIL模塊的教程,需要的朋友可以參考下2019-06-06
Python 讀取.shp文件并生成圖幅編號的實現(xiàn)思路
這篇文章主要介紹了Python 讀取.shp文件并生成圖幅編號,代碼適用于需要處理和分析地理空間數(shù)據(jù)的場景,如城市規(guī)劃、環(huán)境監(jiān)測或自然資源管理,其中它可以幫助用戶讀取特定區(qū)域的Shapefile文件,確定其地理邊界,需要的朋友可以參考下2024-05-05

