匹配思想:從左至右掃瞄乙個字串(或表示式),則每個右括號將與最近遇到的那個左括號相匹配。則可以在從左至右掃瞄過程中把所遇到的左括號存放到堆疊中。每當遇到乙個右括號時,就將它與棧頂的左括號(如果存在)相匹配,同時從棧頂刪除該左括號。
演算法思想:設定乙個棧,當讀到左括號時,左括號進棧。當讀到右括號時,則從棧中彈出乙個元素,與讀到的左括號進行匹配,若匹配成功,繼續讀入;否則匹配失敗,返回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...