為了方便描述,對於需要做匹配的兩個符號,比如』(『和』)』,前者可稱為左側符號,後者可稱為右側符號。在做符號匹配時,如果以左側符號為標準,左側符號需要右側符號來完成匹配,但是由於諸如括號這類的符號可以做巢狀,所以左側符號之後既能有左側符號,也能有右側符號,處理起來很麻煩。以右側符號為標準就沒有這個問題了,每乙個右側符號都需要乙個左側符號來匹配,並且要求該右側符號之前最近的乙個符號必須是相匹配的左側符號,這樣處理起來就方便多了。
利用棧可以很容易地解決這個問題,在遍歷字串時,若當前位置是右側符號,那它需要乙個該位置之前最近的乙個符號為左側符號,否則不匹配。定義乙個棧,用以記錄遍歷到當前位置時,所遇到的左側符號,處理方式是這樣的,每當遇到乙個右側符號時,檢查棧是否為空,若此時棧不為空,則對棧進行pop操作表明頂部元素已被匹配,否則為不匹配情況,直接返回false。當整個字串遍歷結束,我們就可以通過判斷該棧是否為空來判斷整個字串中的符號是否匹配。具體**如下
#include
#include
#include
#include
#define maxsize 100
typedef int status;
typedef char selemtype;
typedef struct
sqstack;
status initstack(sqstack &s)
s.top=s.base;
s.stacksize=maxsize;
return 1;
} status push(sqstack &s,selemtype e)
status clearstack(sqstack &s)
status pop(sqstack &s,selemtype &e)
e=*--s.top;
return 1;
} selemtype gettop(sqstack s,selemtype &e)
else
} int judge(selemtype e)
int judgese(char a,char b)
int put()
while(judge(ch))else
pop(opnd,e);
ch=getchar();} }
printf("括號合法!") ;
return 0;
}int main()
用棧實現括號匹配
假設只允許出現兩種括號 圓括號和方括號,其巢狀順序隨意,即不管 或 等都為正確匹配,但是形如 就成為錯誤的匹配。可以用 期待的緊急程度 的概念來描述 如 共8個括號,從左往右依次標代號為1 8,即第乙個 代號為1,第二個 代號為2,第三個 代號為3,依次類推 當計算機收到了第乙個括號後,期待它與第八...
用棧實現括號匹配
構造棧函式並用棧實現括號匹配 以下 include include include 建立乙個棧,用棧求出二進位制轉十進位制,轉八進位制,銷毀,清空,push,pop 用棧來求逆波蘭演算法 用字元來轉成雙精度變數 用棧來檢驗括號是否正確 建立乙個鍊錶棧,並具有插入,刪除操作 define initnu...
簡單演算法 使用棧實現括號匹配檢驗
設計乙個演算法判定乙個算術表示式中的括號是否正確配對 包括三種括號並且需要考慮大中小三種括號的巢狀順序 並將對應的程式除錯執行通過。演算法思想 暫不考慮資料元素的運算,只考慮括號的配對。則有兩個概念 對右括號期待的急迫程度和當前括號的優先順序。因此前者的特點符合棧的特點,即後遍歷到的括號,急迫程度越...