您好,登錄后才能下訂單哦!
這篇文章主要介紹python中棧是什么意思,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
棧(stack)是一個(gè)項(xiàng)的有序集合,其中添加移除新項(xiàng)總發(fā)生在同一端。這一端通常稱為“頂部”。與頂部對(duì)應(yīng)的端稱為“底部”。
就像圖片所描述的,棧s=(a1,a2,…an-1,an)。最后入棧的是an,最先出棧的也是an。所以棧符合LIFO原則。
LIFO
LIFO,即后進(jìn)先出的排序原則。它基于在集合內(nèi)的時(shí)間長度做排序。較新的項(xiàng)靠近頂部,較舊的項(xiàng)靠近底部。棧的底部很重要,因?yàn)樵跅V锌拷撞康捻?xiàng)是存儲(chǔ)時(shí)間最長的。最近添加的項(xiàng)是最先會(huì)被移除的。
棧之所以重要是因?yàn)樗芊崔D(zhuǎn)項(xiàng)的順序。插入跟刪除順序相反。
最典型的例子就是每個(gè) web 瀏覽器都有一個(gè)返回按鈕。當(dāng)你瀏覽網(wǎng)頁時(shí),這些網(wǎng)頁被放置在一個(gè)棧中(實(shí)際是網(wǎng)頁的網(wǎng)址)。你現(xiàn)在查看的網(wǎng)頁在頂部,你第一個(gè)查看的網(wǎng)頁在底部。如果按‘返回’按鈕,將按相反的順序?yàn)g覽剛才的頁面。
Python實(shí)現(xiàn)棧
# 創(chuàng)建一個(gè)空的新棧。 它不需要參數(shù),并返回一個(gè)空棧。 class Stack: def __init__(self): self.items = [] # 測(cè)試棧是否為空。不需要參數(shù),并返回布爾值。 def isEmpty(self): return self.items == [] # 將一個(gè)新項(xiàng)添加到棧的頂部。它需要 item 做參數(shù)并不返回任何內(nèi)容。 def push(self, item): self.items.append(item) # 從棧中刪除頂部項(xiàng)。它不需要參數(shù)并返回 item 。棧被修改。 def pop(self): return self.items.pop() # 從棧返回頂部項(xiàng),但不會(huì)刪除它。不需要參數(shù)。 不修改棧。 def peek(self): return self.items[len(self.items)-1] # 返回棧中的 item 數(shù)量。不需要參數(shù),并返回一個(gè)整數(shù)。 def size(self): return len(self.items)
將十進(jìn)制數(shù)轉(zhuǎn)換為任意進(jìn)制數(shù)
知道了棧的基本操作就做一個(gè)小項(xiàng)目來練練手。將十進(jìn)制數(shù)轉(zhuǎn)換為任意進(jìn)制數(shù),其實(shí)最高也就十六進(jìn)制(還有更高進(jìn)制嗎)。
def baseConverter(n, base): # n是輸入的十進(jìn)制數(shù)字,base為要轉(zhuǎn)化的進(jìn)制數(shù) digits = '0123456789ABCDEF' #創(chuàng)建一個(gè)新棧 s= Stack() # 將每次計(jì)算所得的余數(shù)添加進(jìn)棧 while n> 0: rem = n % base s.push(rem) n = n // base # 將余數(shù)倒序排列至新字符串 newString = '' while not remstack.isEmpty(): newString = newString + digits[remstack.pop()] return newString
以上是python中棧是什么意思的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。