棧實現括號匹配

2021-08-25 13:53:43 字數 1005 閱讀 6788

匹配思想:從左至右掃瞄乙個字串(或表示式),則每個右括號將與最近遇到的那個左括號相匹配。則可以在從左至右掃瞄過程中把所遇到的左括號存放到堆疊中。每當遇到乙個右括號時,就將它與棧頂的左括號(如果存在)相匹配,同時從棧頂刪除該左括號。

演算法思想:設定乙個棧,當讀到左括號時,左括號進棧。當讀到右括號時,則從棧中彈出乙個元素,與讀到的左括號進行匹配,若匹配成功,繼續讀入;否則匹配失敗,返回flase。另外,在演算法的開始和結束時,棧都應該是空的.所以匹配到最後還要判斷棧是否為空,若非空,則說明匹配失敗.

建立乙個stacktest.h的檔案

//以下是括號匹配具體**

void bracketmatch(const char *str,int size)

void stackdestory(stack *stack)

void stackpush(stack *stack,datatype data)

void stackpop(stack *stack)

datatype stacktop(const stack *stack)

int stacksize(stack *stack)

int stackfull(stack *stack)

int stackempty(stack *stack)

//以下我們測試括號是否匹配

void testbracket()

", "(()))abc",

"(()()abc",

"(())abc"

}; int i = 0;

for (i=0;i<4;i++) }

列印結果:

不匹配

右括號多

左括號多

匹配正常

//以上就是括號匹配的問題,如有問題望批評指正

用棧實現括號匹配

假設只允許出現兩種括號 圓括號和方括號,其巢狀順序隨意,即不管 或 等都為正確匹配,但是形如 就成為錯誤的匹配。可以用 期待的緊急程度 的概念來描述 如 共8個括號,從左往右依次標代號為1 8,即第乙個 代號為1,第二個 代號為2,第三個 代號為3,依次類推 當計算機收到了第乙個括號後,期待它與第八...

順序棧實現括號匹配

採用順序棧程式設計實現 表示式的括號是否匹配問題。要求 輸入帶括號的表示式,判斷其中括號是否配對。擴充套件功能 給出配對括號的位序和不配對括號的位序。include include include include include define overflow 2 define stack init...

通過棧實現括號匹配

首先輸入乙個待匹配的括號序列,如果是左括號將其壓入棧中,如果是右括號則與當前棧頂的括號相匹配 左中括號匹配右中括號,左小括號匹配右小括號 include include define maxsize 100 using namespace std typedef char elemtype type...