Python資料結構之 棧

2021-10-02 21:23:47 字數 2482 閱讀 9395

什麼是棧?

棧是一種先進先出的儲存器,只可以通過乙個入口訪問其中的資料項。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

如何在python中實現棧及其基本操作?

python中的資料結構相對於c和c++來說實在簡單了太多,底層的實現都不需要,只需要呼叫每種資料結構所對應操作所對應的函式即可。下列**段是其底層實現。

```python

class

stcak

:def

__init__

(self)

: self.items =

#判斷棧是否為空

definempty

(self)

:return self.items ==

#棧中的元素是否為空

#向棧中壓入元素

defpush

(self,item)

:#元素出棧

defpop

(self)

:return self.items.pop(

)#取出棧底元素

defpeek

(self)

:return self.items[

len(self.items)-1

]#獲得棧的長度

defsize

(self)

:return

len(self.items)

幾個棧應用的小例子:

3.1 實現通用括號匹配演算法:

問題背景:在實際程式設計的過程中,我們需要判斷疊加的括號左右半邊括號是否完整,以及在html中各標籤和結束標籤是否完整,對於該類問題即可通過棧操作來解決。

from pythonds.basic.stack import stack

defparchecker

(symbolstring)

:#建立乙個新的棧

s = stack(

)#是否平衡的初始狀態設為true

balanced =

true

index =

0while index <

len(symbolstring)

and balanced:

#從第乙個符號開始遍歷

symbol = symbolstring[index]

#如果是三種符號中的一種,壓棧

if symbol in

"()"

return

open

.index(

open

)== close.index(close)

print

(parchecker(

'}]'))

print

(parchecker(

'[ prec[

"*"]=3

prec[

"/"]=3

prec[

"+"]=2

prec[

"-"]=2

prec[

"("]=1

opstack = stack(

) postfixlist =

#將語句分割成乙個listlit(),解析表示式到單詞列表

tokenlist = infixexpr.split(

)for token in tokenlist:

if token in

"abcdefghijklmnopqrstuvwxyz"

or token in

"0123456789"

:elif token ==

"(":

opstack.push(token)

elif token ==

")":

toptoken = opstack.pop(

)while toptoken !=

'(':

toptoken = opstack.pop(

)else

:while

(not opstack.isempty())

and \

(prec[opstack.peek()]

>= prec[token]):

))opstack.push(token)

while

not opstack.isempty():

))return

" ".join(postfixlist)

print

(infixtopostfix(

'(v*a)+(b*c)'

))

Python資料結構之棧

容器 作為容器資料結構,它們保證存入的元素被儲存在容器裡,尚未明確刪除的元素總是可以訪問,而取出並刪除的元素就不再存在於容器中了 棧 棧主要用於在計算過程中儲存臨時的資料,這些資料是計算中發現或者產生的,在後面的計算中可能需要使用它們 棧是最簡單的快取結構,它支援資料項的儲存和訪問,不支援資料項之間...

python資料結構之棧

1.棧的特點 先出,實際上就是對順序表和煉表的進一步封裝。棧可以用順序表表示,也可以用鍊錶表示。用鍊錶構造棧 方法一 在鍊錶頭部新增元素,並在頭部取出元素,相應的時間複雜度為o 1 方法二 在鍊錶尾部新增元素,並在尾部取出元素,因為要遍歷整個鍊錶,相應的時間複雜度為o n 因此,選用方法一。3.關於...

python資料結構之棧(stack)

目錄 棧的定義 棧的基本操作 小練習棧遵循後進先出 last in first out 現實生活中也有不少這樣的例子,比如在學校食堂吃完飯時,你把盤子放到桌子上,疊起來之後,阿姨過來拿盤子出去洗,假如是手洗,那肯定是先從最上面的盤子開始拿來洗的,而最上面的盤子是最後放上去的,卻是第乙個 被拿出來的,...