Python實(shí)現(xiàn)的棧(Stack)
前言
Python本身已有順序表(List、Tupple)的實(shí)現(xiàn),所以這里從棧開始。
什么是棧
想象一摞被堆起來的書,這就是棧。這堆書的特點(diǎn)是,最后被堆進(jìn)去的書,永遠(yuǎn)在最上面。從這堆書里面取一本書出來,取哪本書最方便?肯定是最上面那本。棧這種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)就是如此:后進(jìn)先出(Last In First Out - LIFO),即最后被堆進(jìn)去的數(shù)據(jù),最先被拿出來。
棧的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è)過程叫做壓棧,入棧,進(jìn)?!?
def push(self, item):
self.items.append(item)
# 把棧頂元素丟出去(程序員喜歡把這個(gè)過程叫做出棧……)
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()
# 把棧頂元素丟出去,并打印出來
print my_stack.pop()
# 再看一下棧頂元素是誰
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)的。
那么,這里有一些有的沒的要說一下~
如果希望items[]是Stack類私有的屬性,這樣做就好了:
def __init__(self): self.__items = []
沒錯(cuò),就是在items前面加兩個(gè)下劃線__,在Python中,類的私有成員就是這樣定義噠~
如果希望限定Stack類的成員只有items,不要其他的怪蜀黍亂加成員,那么這樣做就好了:
class Stack(object):
__slots__ = ('__items')
def __init__(self):
self.__items = []
這樣就安全多啦~
Python并沒有Java里的public/private/protected這樣的修飾符,因?yàn)镻ython的設(shè)計(jì)者認(rèn)為,“大家都是成年人了”~
總結(jié)
以上所述是小編給大家介紹的Python實(shí)現(xiàn)的棧(Stack),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Python pandas軸旋轉(zhuǎn)stack和unstack的使用說明
- python GUI庫圖形界面開發(fā)之PyQt5窗口布局控件QStackedWidget詳細(xì)使用方法
- Python numpy實(shí)現(xiàn)數(shù)組合并實(shí)例(vstack,hstack)
- python django使用haystack:全文檢索的框架(實(shí)例講解)
- Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能
- 通過Python使用saltstack生成服務(wù)器資產(chǎn)清單
- Python算法之棧(stack)的實(shí)現(xiàn)
- 詳解python數(shù)據(jù)結(jié)構(gòu)之棧stack
相關(guān)文章
python通過urllib2獲取帶有中文參數(shù)url內(nèi)容的方法
這篇文章主要介紹了python通過urllib2獲取帶有中文參數(shù)url內(nèi)容的方法,涉及Python中文編碼的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Python使用zip合并相鄰列表項(xiàng)的方法示例
這篇文章主要介紹了Python使用zip合并相鄰列表項(xiàng)的方法,涉及zip、iter函數(shù)合并相鄰列表項(xiàng)、切片等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
Python實(shí)現(xiàn)列表轉(zhuǎn)換成字典數(shù)據(jù)結(jié)構(gòu)的方法
這篇文章主要介紹了Python實(shí)現(xiàn)列表轉(zhuǎn)換成字典數(shù)據(jù)結(jié)構(gòu)的方法,結(jié)合實(shí)例形式分析了Python數(shù)值類型轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2016-03-03
python 通過 pybind11 使用Eigen加速代碼的步驟
這篇文章主要介紹了python 通過 pybind11 使用Eigen加速代碼的步驟,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
django 實(shí)現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法
今天小編就為大家分享一篇django 實(shí)現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
關(guān)于TensorBoard可視化不顯示數(shù)據(jù)問題No scalar data was&nbs
這篇文章主要介紹了如何解決TensorBoard可視化不顯示數(shù)據(jù)問題No scalar data was found,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
python實(shí)現(xiàn)zabbix發(fā)送短信腳本
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)zabbix發(fā)送短信腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
Python判斷和循環(huán)語句的分析與應(yīng)用
判斷語句是用來篩選條件,過濾條件的。循環(huán)語句是用來解決重復(fù)性代碼的問題,提高工作效率。今天的知識(shí)點(diǎn)不多,耐心看完吧2022-07-07

