author:小黃
緩慢而堅定的生長
棧是由一系列物件組成的乙個集合,這些物件的插入和刪除遵循後進先出(lifo)的原則。其基本結構如下圖所示,
棧是最簡的資料結構,但同樣也是最重要的書籍結構。
用s表示乙個棧,其基本的一些函式如下:
下面用乙個例子講解一下棧的相關操作:
看完這個例子,相信你們對這個棧有了進一步的了解,下面將用函式來帶你們了解棧。
class
arraystack
:def
__init__
(self)
:# 建立乙個空棧
self._data =
def__len__
(self)
:# 返回棧中的元素數量
return
len(self._data)
defisempty
(self)
:# 如果棧為空則返回「true」
return
len(self._data)==0
defpush
(self,a)
:# 向棧頂新增元素a
defpop
(self)
:# 移除棧頂的元素並返回,如果棧為空,則返回乙個錯誤
if self.isempty():
raise exception(
'stack is empty'
)return self._data.pop(
)def
top(self)
:# 返回棧頂的元素但不移除,如果棧為空,則返回乙個錯誤
if self.isempty():
raise exception(
'stack is empty'
)return self._data[-1
]
複雜度分析:
操作執行時間
s.push(a)
o(1)
s.pop()
o(1)
s.top()
o(1)
s.isempty()
o(1)
s.len()
o(1)
每個開始符合必須與其相對應的結束符合相匹配:
完整**如下:
class
arraystack
:def
__init__
(self)
:# 建立乙個空棧
self._data =
def__len__
(self)
:# 返回棧中的元素數量
return
len(self._data)
defisempty
(self)
:# 如果棧為空則返回「true」
return
len(self._data)==0
defpush
(self,a)
:# 向棧頂新增元素a
defpop
(self)
:# 移除棧頂的元素並返回,如果棧為空,則返回乙個錯誤
if self.isempty():
raise exception(
'stack is empty'
)return self._data.pop(
)def
top(self)
:# 返回棧頂的元素但不移除,如果棧為空,則返回乙個錯誤
if self.isempty():
raise exception(
'stack is empty'
)return self._data[-1
]def
parcheck
(s):
# s是字串型別
a = arraystack(
) balance =
true
# 這是標記
for i in s:
if i ==
'(':
a.push(i)
else
:if a.isempty():
balance =
false
break
else
: a.pop(
)if a.isempty(
)and balance:
return
true
else
:return
false
class
arraystack
:def
__init__
(self)
:# 建立乙個空棧
self._data =
def__len__
(self)
:# 返回棧中的元素數量
return
len(self._data)
defisempty
(self)
:# 如果棧為空則返回「true」
return
len(self._data)==0
defpush
(self,a)
:# 向棧頂新增元素a
defpop
(self)
:# 移除棧頂的元素並返回,如果棧為空,則返回乙個錯誤
if self.isempty():
raise exception(
'stack is empty'
)return self._data.pop(
)def
top(self)
:# 返回棧頂的元素但不移除,如果棧為空,則返回乙個錯誤
if self.isempty():
raise exception(
'stack is empty'
)return self._data[-1
]def
isright
(s):
left =
'])'
a = arraystack(
)for i in s:
if i in left:
a.push(i)
elif i in right:
if a.isempty():
return
false
# 判斷此時右括號與當前棧彈出的左括號的索引是否相同
if right.index(i)
!= left.index(a.pop())
:return
false
return a.isempty(
)
python資料結構與演算法 棧
逆波蘭表示式 reverse polish notation 有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。輸入 2 1 3 輸出 9 解釋 2 1 3 9 分析 棧 遍歷陣列,逐漸壓入棧中,如果遇到運算字元,則彈出棧頂兩個元素,之後將計算結果再壓入棧中 class solu...
python資料結構與演算法 棧
棧 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 peek 返回棧頂元素 is empty 判斷棧是否為空 size 返回棧的元素個數 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 p...
資料結構與演算法《棧》
概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...