資料結構5 棧的應用(簡單括號匹配)

2021-10-23 13:02:31 字數 1850 閱讀 9368

正確的括號:((())), ((()))

錯誤的括號:(((((()), ()))

對括號是否正確匹配的識別,是很多語言編譯器的基礎演算法

下面看看如何構造括號匹配識別演算法

從左到右掃瞄括號串,最新開啟的左括號,應該匹配最先遇到的右括號,這樣,第乙個左括號(最早開啟),就應該匹配最後乙個右括號(最後遇到),這種次序反轉的識別,正好符合棧的特性

class stack():

"""定義乙個棧"""

def __init__(self):

self.items =

def isempty(self):

return self.items() ==

def pop(self):

return self.items.pop()

def push(self, item):

def peek(self):

return self.items[len(self.items)-1]

def size(self):

return len(self.items)

def parchecker(symbolstring):

s = stack()

balanced = true

index = 0

while index < len(symbolstring) and balanced:

symbol = symbolstring[index]

if symbol in "(":

s.push(symbol)

else:

if s.isempty():

balanced = false

else:

s.pop()

index += 1

if balanced and s.isempty():

return true

else:

return false

print(parchecker('((()))'))

print(parchecker('(()'))

但是在實際的應用中,會碰到多種括號混合使用的情況,比如: '()',這些不同的括號混合使用使用時要注意不同括號的匹配情況。

**實現:

class stack():

"""定義乙個棧"""

def __init__(self):

self.items =

def isempty(self):

return self.items() ==

def pop(self):

return self.items.pop()

def push(self, item):

def peek(self):

return self.items[len(self.items)-1]

def size(self):

return len(self.items)

def parchecker(symbolstring):

s = stack()

balanced = true

index = 0

while index < len(symbolstring) and balanced:

symbol = symbolstring[index]

if symbol in "(['

return opens.index(open) == closers.index(close)

print(parchecker('((()))'))

print(parchecker('(()'))

資料結構 棧的應用 括號匹配

include include include 鏈式棧 括號匹配校驗 define success 0 define failure 1 typedef struct nodestnode def typedef struct linkstackstlinkstack def typedef voi...

資料結構 棧的應用 括號匹配的檢驗

棧的應用 括號匹配的檢驗 演算法內容 以此掃瞄所有字元,遇到左括號入棧,遇到右括號則彈出棧頂元素檢查是否匹配。匹配失敗的情況 1.左括號單 2.右括號單 3.左右括號不匹配 include include define maxsize 10 定義棧中元素的最大個數 typedef struct sq...

資料結構之棧(2 1)應用 括號匹配

編寫乙個演算法,判斷鍵盤輸入的表示式是否配對。假設括號只包含 1 所謂括號配對,就是 2 輸入的字串中,可能包含 也可能沒有 數字,及其他符號。3 每當掃瞄字串元素 現 需要進行括號匹配檢查。檢查方式為 看最近出現的 而用什麼儲存 呢?棧是選擇之一。那棧的儲存狀態是,要麼有 要麼為空。4 根據以上分...