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

