《python資料結構與演算法分析》(第二版)用python實現棧,檔名為pystack.py
# !/user/bin/env python
# coding:utf-8
# 假設列表尾部是棧頂端o(1)
class
stack
:def
__init__
(self)
: self.items =
defisempty
(self)
:#判棧空
return self.items ==
defpush
(self, item)
:#進棧
defpop
(self)
:#出棧
return self.items.pop(
)def
peek
(self)
:#獲取棧頂元素
return self.items[
len(self.items)-1
]def
size
(self)
:#獲取棧的大小
return
len(self.items)
匹配括號:
from pystack import stack
#利用棧實現括號匹配
defparchecker
(symbolstring)
: s = stack(
) balanced =
true
index =
0while index <
len(symbolstring)
and balanced:
symbol = symbolstring[index]
if symbol ==
'(':
# 如果遇到左括號,則進棧
s.push(symbol)
else
:if s.isempty():
# 如果遇到右括號,但棧為空,沒有與之匹配的左括號,不匹配
balanced =
false
else
: s.pop(
)# 如果遇到右括號,且棧不為空,則出棧,表示匹配了一對括號
index = index +
1if balanced and s.isempty():
# 遍歷完字串後,如果所有括號匹配且棧為空,則函式返回true,否則返回false
return
true
else
:return
false
普通情況:匹配符號,如:"( [ ] )"
from pystack import stack
defparchecker1
(symbolstring)
: s = stack(
) balanced =
true
index =
0while index <
len(symbolstring)
and balanced:
symbol = symbolstring[index]
if symbol in
'(['
# index()方法:str.index(str, beg=0, end=len(str))
# str:指定檢索的字串\\beg:開始索引,預設0\\end:結束索引,預設字串長度
return opens.index(
open
)== closers.index(close)
用棧實現括號匹配
假設只允許出現兩種括號 圓括號和方括號,其巢狀順序隨意,即不管 或 等都為正確匹配,但是形如 就成為錯誤的匹配。可以用 期待的緊急程度 的概念來描述 如 共8個括號,從左往右依次標代號為1 8,即第乙個 代號為1,第二個 代號為2,第三個 代號為3,依次類推 當計算機收到了第乙個括號後,期待它與第八...
用棧實現括號匹配
構造棧函式並用棧實現括號匹配 以下 include include include 建立乙個棧,用棧求出二進位制轉十進位制,轉八進位制,銷毀,清空,push,pop 用棧來求逆波蘭演算法 用字元來轉成雙精度變數 用棧來檢驗括號是否正確 建立乙個鍊錶棧,並具有插入,刪除操作 define initnu...
棧和佇列 用棧實現括號匹配
一 棧匹配 思路 借助棧來實現括號的匹配,如果碰到的是三種左括號的話,將左括號進行入棧,以為需要匹配到括號肯定都是右括號於左括號進行匹配的,所以遇到左括號直接入棧就可以了。如果遇到右括號,需要進行匹配,如果目前棧中為空的話,直接返回false,因為這個括號很明顯的多出來了。如果不為空,將棧中的乙個元...