使用Python實現(xiàn)一個棧判斷括號是否平衡
棧(Stack)在計算機領域是一個被廣泛應用的集合,棧是線性集合,訪問都嚴格地限制在一段,叫做頂(top)。 舉個例子,棧就想一摞洗干凈的盤子,你每次取一個新盤子,都是放在這一摞盤子的最上頭,當你往里面添加盤子的時候,也是放在最上面,處在底部的盤子,你可能永遠也用不到。 棧的最常見操作,有如下兩個:
push(a) # 壓入,將a壓入的棧中 pop() # 彈出,將棧的最后一個元素彈出
可是使用Python的列表數(shù)據(jù)結構,來模擬棧的操作,使用 append 來模擬 push ,使用列表的 pop 來模擬棧的 pop ,但是這樣做有一個弊端,那就是列表原本自帶的操作方法同樣能夠使用,可能會造成混亂。
棧的實現(xiàn) 下面就通過借助Python的列表,來自定義一個棧類:
class Stack(object):
"""使用數(shù)組實現(xiàn)一個棧"""
def __init__(self):
self.data = []
def push(self, num):
"""壓棧操作"""
self.data.append(num)
def pop(self):
"""返回從棧中彈出的元素, 當棧為空的時候, 拋出IndexError"""
return self.data.pop()
def peek(self):
"""查看當前棧頂?shù)脑? 當棧為空的時候, 拋出IndexError"""
return self.data[-1]
def __len__(self):
"""返回棧的長度, 調用len(obj)時會自動調用obj對象的__len__方法"""
return len(self.data)
def isEmpty(self):
"""判斷棧是否為空"""
return True if len(self.data)==0 else False
def clear(self):
"""清空棧"""
self.data = []
def __repr__(self):
"""當前對象的表現(xiàn)形式, 在終點直接鍵入對象時會調用"""
return 'Stack_' + str(self.data)
def __str__(self):
"""當前對象的字符串表示, 使用print(obj)時會調用"""
return 'Stack_' + str(self.data)
以上代碼實現(xiàn)了一個簡單的基于列表的棧。
棧的應用 棧應用的一個很典型的例子,就是檢查括號是否匹配。 例如: 每一個開始的 [ 后面,都應該跟著一個位置正確的 ] ,并且每一個 ( 后面,也應該跟著一個位置正確的結束的 ) .
(...)...(...)
(...)...(...
)...((...)
def isBalance(text):
"""棧的應用,檢查括號是否平衡"""
result_stack = Stack()
for i in text:
if i in ['{', '[', '(']:
result_stack.push(i)
elif i in ['}', ']', ')']:
# 遇到結束括號的情況
if result_stack.isEmpty():
# 如果當前棧為空, 不匹配,返回False
return False
chFromStack = result_stack.pop()
if not ((chFromStack == '{' and i == '}' )
or (chFromStack == '[' and i == ']')
or (chFromStack == '(' and i == ')')):
# 如果不滿足匹配條件, 則返回False
return False
# 遍歷結束后, 如果結果棧為空, 則代表括號匹配, 棧不為空, 括號不匹配
return result_stack.isEmpty()
補充:Python中的棧
在python中,個人理解為??梢杂昧斜韥泶?/p>
服從FILO:First In Last Out
其中入棧為(利用append函數(shù))
stack = [] stack.append(<item>)
出棧為(利用pop函數(shù))
stack.pop(-1) #stack.pop()也可
服從FIFO:First In First Out
入棧為:
stack = [] stack.append(<item>)
出棧為:
stack.pop(0)
總結
以上所述是小編給大家介紹的使用Python實現(xiàn)一個棧判斷括號是否平衡,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
Python報錯:NameError:?name?‘xxx‘?is?not?defined的解決辦法
這篇文章主要給大家介紹了關于Python報錯:NameError:?name?‘xxx‘?is?not?defined的解決辦法,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-06-06
Python利用函數(shù)式編程實現(xiàn)優(yōu)化代碼
函數(shù)式編程(Functional Programming)是一種編程范式,它將計算視為函數(shù)的求值,并且避免使用可變狀態(tài)和循環(huán),在Python中還可以利用它的簡潔和高效來解決實際問題,下面我們就來學習一下它的具體用法吧2023-11-11
Python3 實現(xiàn)隨機生成一組不重復數(shù)并按行寫入文件
下面小編就為大家分享一篇Python3 實現(xiàn)隨機生成一組不重復數(shù)并按行寫入文件的示例。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

