計算過程中可能包含大量的的括號,而且這些括號有優先順序,因此在演算法中需要檢驗括號是否平衡,正確的對括號進行匹配,是很多語言編譯器的基礎演算法。
正確匹配形式:
(){} ({}) 等
錯誤匹配形式:
( [ )] ) 等
匹配過程:
(1)從左到右掃瞄括號串,最近開啟的左括號,應該匹配最先遇到的右括號;
(2)第乙個開啟的左括號(最早開啟),就應該匹配最後乙個右括號(最後遇到);——次序翻轉,正好符合棧的特性。
執行流程圖:
1.1定義棧及各種屬性
class
stack
(object):
#定義棧 類
"""棧"""
def__init__
(self)
: self.items =
defis_empty
(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)
1.2 定義括號匹配過程
def
parcheck
(symbolstring)
:#定義檢查括號
s=stack(
) balanced=
true
index=
0while index <
len(symbolstring)
and balanced:
symbol=symbolstring[index]
if symbol ==
"(":
##定義字串中括號型別
s.push(symbol)
else
:if s.is_empty():
balanced=
false
else
: top=s.pop()if
not matches(top,symbol)
: balanced=
false
index=index+
1if balanced and s.is_empty():
return
true
else
:return
false
defmatches
(open
,close)
: opens=
"(["
return opens.index(
open
)==closers.index(close)
1.3 例項驗證
print
(parcheck(
'()'))
print
(parcheck())
print
(parcheck(
))print
(parcheck(((
))))
###輸出結果
true
true
true
true
htmi/xml文件也有類似於括號的開閉標記,註冊層級結構化的校驗、操作也可通過棧來實現。
用棧實現括號匹配的演算法
要求 用棧的基本操作實現括號匹配演算法,要求至少包括兩種型別的括號。下面的 是我的一些思路,並不算最優的,大家學習就好啦 include include define max 5 初始建立棧的容量 define add 5 棧滿時新增的容量 typedef char elemtype typedef...
棧的應用(括號匹配演算法實戰)
1.實驗目的 棧 stack 是線性結構的核心內容之一。本實驗要求用高階語言c語言編寫基於棧的順序儲存結構實現棧的入棧 出棧 取棧頂元素和判空操作,並基於上述棧的基本操作實現括號匹配演算法,完成實驗報告的填寫,以便加深理解有關棧結構的抽象資料型別等概念,並體會和了解棧結構在日常使用者輸入操作中的應用...
棧的應用 括號匹配
3.1棧的應用 括號匹配 一 實驗目的1 掌握堆疊特殊線性表的儲存方式的基本操作方法。2 掌握堆疊後進先出運算原則在解決實際問題中的應用。3 掌握使用棧的原理來解決表示式中的括號配對問題。二 實驗內容 假設乙個算術表示式中包含圓括弧 方括弧三種型別的括弧,編寫乙個程式用於判別表示式中括弧是否正確配對...