利用棧的特性判斷括號是否匹配

2022-07-09 17:51:15 字數 965 閱讀 6011

括號匹配的檢驗:假設輸入字串中有三種括號,大括號、中括號、小括號,其巢狀的方式是隨意的。

即類似的都為正確格式。

檢驗括號是否匹配的方法可用「期待的急迫程度」來解決。例如下面的括號串:

當計算機接受第乙個括號時,它期待著第六個括號與它見面,然而我們輸入的卻是第二個括號,同理,一直到第三個括號,3期待著4與它見面,恰好我們下乙個輸入的便是4號括號,3和4滿足,抬走。

之後第二個括號的期待就是最急迫的了,以此類推,直到出現不匹配的括號或者所有括號均找到了其對應的另一半。

所以,在演算法中設定乙個棧,每讀入乙個左括號,壓入棧中。或者讀入乙個右括號,若棧不為空,則從棧中取出括號來匹配;若為空,很明顯,括號不匹配。

此外,為了應對

前面都匹配,最後乙個不匹配的情況,最後還需要判斷棧是否為空,因為匹配的話,左括號都被取完了,右括號我們沒有壓棧。所以棧一定是空的。

下面為**的主要部分。

int

main()

' ||c == '

]' || c == ')'

)

else'))

ofo = 1;//

匹配else}}

if(c == '@'

)

break

; }

if(ofo == 1 && stacklen(s) == 0)//

由於唯讀入括號,棧為空才匹配

printf("

yes\n");

else

printf(

"no\n");

return

0;}

利用棧判斷括號是否匹配

輸入格式如下 3 輸出格式如下 yes no yes 演算法描述 利用棧來判斷 注意出棧時,考慮棧是否為空 最後匹配的結果應該是棧為空 1 從左到右進行掃瞄字元 2 若為左括號 else public boolean isbalanced string str elseelseelse end fo...

利用棧判斷字串括號是否匹配

任務描述 本關任務 基於棧stack資料結構判斷字串中的括號是否匹配,字串中僅包含如下字元 相關知識 為了完成本關任務,你需要掌握 1.如何建立乙個棧,2.入棧 出棧操作。演算法思想 輸入符號串str 初始化棧s for i 0 str i 0 i 掃瞄括號串 若棧不空,則匹配不成功,否則匹配成功 ...

判斷括號是否匹配

日期 2009.6.20 問題 設計乙個演算法,判斷乙個算術表示式中的括號是否配對。算術表示式儲存在帶頭結點的單迴圈鍊錶中,每個結點有兩個域 ch和 link 其中ch 域為字元型別。1 思路 根據括號的特點 進行匹配的時候,第乙個做括號最後乙個匹配,最後乙個左括號與第乙個右括號相匹配,恰好可以使用...