什麼是棧?
棧是一種先進先出的儲存器,只可以通過乙個入口訪問其中的資料項。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
如何在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 現實生活中也有不少這樣的例子,比如在學校食堂吃完飯時,你把盤子放到桌子上,疊起來之後,阿姨過來拿盤子出去洗,假如是手洗,那肯定是先從最上面的盤子開始拿來洗的,而最上面的盤子是最後放上去的,卻是第乙個 被拿出來的,...