Python實(shí)現(xiàn)的棧(Stack)
前言
Python本身已有順序表(List、Tupple)的實(shí)現(xiàn),所以這里從棧開(kāi)始。
什么是棧
想象一摞被堆起來(lái)的書(shū),這就是棧。這堆書(shū)的特點(diǎn)是,最后被堆進(jìn)去的書(shū),永遠(yuǎn)在最上面。從這堆書(shū)里面取一本書(shū)出來(lái),取哪本書(shū)最方便?肯定是最上面那本。棧這種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)就是如此:后進(jìn)先出(Last In First Out - LIFO),即最后被堆進(jìn)去的數(shù)據(jù),最先被拿出來(lái)。
棧的Python實(shí)現(xiàn)
??梢杂庙樞虮矸绞綄?shí)現(xiàn),也可以用鏈表方式實(shí)現(xiàn)。我大Python的內(nèi)建數(shù)據(jù)結(jié)構(gòu)太強(qiáng)大,可以用list直接實(shí)現(xiàn)棧,簡(jiǎn)單快捷。人生苦短,我用Python。代碼如下:
class Stack(object): # 初始化棧為空列表 def __init__(self): self.items = [] # 判斷棧是否為空,返回布爾值 def is_empty(self): return self.items == [] # 返回棧頂元素 def peek(self): return self.items[len(self.items) - 1] # 返回棧的大小 def size(self): return len(self.items) # 把新的元素堆進(jìn)棧里面(程序員喜歡把這個(gè)過(guò)程叫做壓棧,入棧,進(jìn)?!? def push(self, item): self.items.append(item) # 把棧頂元素丟出去(程序員喜歡把這個(gè)過(guò)程叫做出?!? def pop(self, item): return self.items.pop() if __name__ == __main__: # 初始化一個(gè)棧對(duì)象 my_stack = Stack() # 把'h'丟進(jìn)棧里 my_stack.push('h') # 把'a'丟進(jìn)棧里 my_stack.push('a') # 看一下棧的大小(有幾個(gè)元素) print my_stack.size() # 打印棧頂元素 print my_stack.peek() # 把棧頂元素丟出去,并打印出來(lái) print my_stack.pop() # 再看一下棧頂元素是誰(shuí) print my_stack.peek() # 這個(gè)時(shí)候棧的大小是多少? print my_stack.size() # 再丟一個(gè)棧頂元素 print my_stack.pop() # 看一下棧的大小 print my_stack.size # 棧是不是空了? print my_stack.is_empty() # 哇~真好吃~ print 'Yummy~'
Tips:
看完上面的代碼,聰明的同學(xué)一定知道了,Python里面實(shí)現(xiàn)棧,就是把list包裝成一個(gè)類,再添加一些方法作為棧的基本操作。其他的數(shù)據(jù)結(jié)構(gòu)在Python中也是以類似的方式實(shí)現(xiàn)的。
那么,這里有一些有的沒(méi)的要說(shuō)一下~
如果希望items[]是Stack類私有的屬性,這樣做就好了:
def __init__(self): self.__items = []
沒(méi)錯(cuò),就是在items前面加兩個(gè)下劃線__,在Python中,類的私有成員就是這樣定義噠~
如果希望限定Stack類的成員只有items,不要其他的怪蜀黍亂加成員,那么這樣做就好了:
class Stack(object): __slots__ = ('__items') def __init__(self): self.__items = []
這樣就安全多啦~
Python并沒(méi)有Java里的public/private/protected
這樣的修飾符,因?yàn)镻ython的設(shè)計(jì)者認(rèn)為,“大家都是成年人了”~
總結(jié)
以上所述是小編給大家介紹的Python實(shí)現(xiàn)的棧(Stack),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明
- python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5窗口布局控件QStackedWidget詳細(xì)使用方法
- Python numpy實(shí)現(xiàn)數(shù)組合并實(shí)例(vstack,hstack)
- python django使用haystack:全文檢索的框架(實(shí)例講解)
- Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能
- 通過(guò)Python使用saltstack生成服務(wù)器資產(chǎn)清單
- Python算法之棧(stack)的實(shí)現(xiàn)
- 詳解python數(shù)據(jù)結(jié)構(gòu)之棧stack
相關(guān)文章
Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么
本篇文章對(duì)Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么,進(jìn)行了很好的講解,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04python Selenium爬取內(nèi)容并存儲(chǔ)至MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了python Selenium爬取內(nèi)容并存儲(chǔ)至MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-03-03python實(shí)現(xiàn)對(duì)excel中需要的數(shù)據(jù)的單元格填充顏色
這篇文章主要介紹了python實(shí)現(xiàn)對(duì)excel中需要的數(shù)據(jù)的單元格填充顏色,文章圍繞主題展開(kāi)詳細(xì)單元格填充介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06一行python實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的方法
今天小編就為大家分享一篇一行python實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python2與Python3關(guān)于字符串編碼處理的差別總結(jié)
這篇文章主要給大家介紹了Python2與Python3關(guān)于字符串編碼處理差別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Python實(shí)現(xiàn)為PDF大文件批量去除水印
在閱讀過(guò)程中如果遇到一些帶有水印的資料是比較煩心的,而市面上去水印的功能有多要收費(fèi)且很不方便,那么,如何通過(guò)Python來(lái)對(duì)這類圖片水印進(jìn)行去除呢,本文就來(lái)和大家分享一下實(shí)現(xiàn)方法吧2023-05-05pythonfor循環(huán)中range與len區(qū)別
這篇文章主要介紹了pythonfor循環(huán)中range與len區(qū)別,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定參考價(jià)值,需要的小伙伴可以參考一下2022-06-06