括號匹配問題
假設乙個算術表示式中包含圓括號、方括號和花括號三種型別的括號,編寫乙個函式,用來判別表示式中的括號是否正確配對,並設計乙個測試主函式。
【演算法思想】
在算術表示式中,右括號和左括號匹配的次序正好符合後到的括號要最先被匹配的「後進先出」堆疊操作特點,因此可以借助乙個堆疊來進行判斷。
括號匹配共有以下4種情況:
左、右括號配對次序不正確;
右括號多於左括號;
左括號多於右括號:
左、右括號匹配正確。
具體方法如下:順序掃瞄算術表示式(表現為乙個字串),當遇到3種型別括號的左括號時,讓該括號進棧。當掃瞄到某一種型別的右括號時,比較當前棧頂括號是否與之匹配,若匹配,則退棧繼續進行判斷:若當前棧頂括號與當前掃瞄的括號不相同,則左、右括號配對次序不正確;若字串當前為某種型別右括號而堆疊已空,則右括號多於左括號:字串迴圈掃瞄結束時,若堆枝非空(即堆枝中尚有某種型別左括號),則說明左括號多於右括號;如果未出現
上述3種情況,則說明左、右括號匹配正確。
我定義了新的標頭檔案seqlist.h,再建立c原始檔檔案。
實際操作如下:
①建立seqlist.h標頭檔案
②建立結構體
#ifndef _seqstack_h_
#define _seqstack_h_
#include
#define maxstacksize 100
typedef
struct
seqstack;
③建立順序表
//初始化
void
stackinitiate
(seqstack* s)
//初始化順序堆疊s
intstacknotempty
(seqstack s)
//判斷順序堆疊 s 非空否,非空則返回 1,否則返回 0
//入棧
intstackpush
(seqstack* s, datatype x)
//把資料元素值 x 存入順序堆疊 s 中,入棧成功則返回 1,否則返回 0
else
}//出棧
intstackpop
(seqstack* s, datatype* d)
//取出順序堆疊s的棧頂資料元素值由引數d帶回,出棧成功則返回1,否則返回0
else
}//取棧頂資料元素
intstacktop
(seqstack s, datatype* d)
else
}#endif
// ! _seqstack_h_
主函式,如下:
#include
#include
#define maxstacksize 100
typedef
char datatype;
#include
"seqstack.h"
void
expiscorrect
(char exp,
int n)
elseif(
stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c ==
'[')
stackpop
(&mystack,
&c);
else
if(exp[i]
==']'
&&stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c !=
'[')
elseif(
stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c ==
''&&
stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c !=
'elseif(
((exp[i]
==')')||
(exp[i]
==']')||
(exp[i]
=='}'))
&&!stacknotempty
(mystack))}
if(stacknotempty
(mystack)
)printf
("左括號多於右括號!\n");
else
printf
("左右括號匹配正確!\n");
}void
main
(void)
n =strlen
(x);
expiscorrect
(mystack.stack, n)
;return
;}
此方法為我的學習記錄,僅供參考。 括號匹配演算法Java實現
描述 給定乙個字串,其中的字元只包含三種括號 花括號 中括號 圓括號 即它僅由 這六個字元組成。設計演算法,判斷該字串是否有效,即字串中括號是否匹配。括號匹配要求括號必須以正確的順序配對,如 或 等為正確的格式,而 或 或 均為不正確的格式。思路 資料結構選用棧,讀到左括號時入棧,讀到右括號時判斷是...
括號匹配演算法
檢驗括號是否匹配的方法可以用 期待的急迫程度 這個概念來描述。例如,考慮下列括號序列 1 2 3 4 5 6 7 8 當計算機接受了第乙個括號後,它期待著與其匹配的第八個括號的出現,然而等來的卻是第二個括號,此時第乙個括號 只能暫時靠邊,而迫切等待與第二個括號相匹配的 第七個括號 的出現,類似地,因...
括號匹配演算法
題目 有一段字串,包含 和 和 中的一種或者多種,這三種括號出現次序不定,可隨意巢狀。編寫 判斷三種括號是否正確匹配。思路一 棧的思想 括號匹配是運用棧的經典思想。在 演算法中設定乙個空棧,每次讀入乙個括號,若是左括號,則壓入棧中,等到對應的右括號壓棧,若是右括號,能使置於棧頂的最急迫的期待得以消解...