堆疊應用案例 括號匹配檢驗問題解決方案

2021-10-04 02:23:42 字數 2946 閱讀 8214

括號主要有:(){}

//括號匹配情況有:

/*左括號多於右括號

右括號多於左括號

左右括號配對次序不正確

左、右括號匹配正確

思路為:

//---------括號匹配問題---------

//說明:解決圓括號、方括號、花括號的層層巢狀是否正確。

//如,程式設計工具的符合提示。

////對於解決帶運算的相關解決方案,如(1+2)*5+6=?等中綴算術表示式

//可依據此解決思路,順帶把數字壓入堆疊中,遇到匹配的括號再彈出進行運算,再壓入堆疊

////括號匹配情況有:

/*1. 左括號多於右括號

2. 右括號多於左括號

3. 左右括號配對次序不正確

4. 左、右括號匹配正確

*/#include

#include

#define maxstacksize 100

typedef

char datatype;

typedef

struct

seqstack;

//初始化順序堆疊s

void

stackinitiate

(seqstack* s)

//飛空否

//判斷順序堆疊s是否空,非空則返回1,否則返回0

intstacknotempty

(seqstack s)

//入棧

//把資料元素的值x存入順序堆疊s中,入棧成功返回1,否則返回0

intstackpush

(seqstack* s, datatype x)

else

}//出棧

//取出順序堆疊s的棧頂資料元素值由引數d帶回,出棧成功返回1,否則返回0

intstackpop

(seqstack* s, datatype* d)

else

}//取棧頂資料元素

//取順序棧頂s的當前棧頂資料元素值由引數d帶回,成功返回1,否則返回0

intstacktop

(seqstack s, datatype* d)

else

}//判斷有n個字元的字串exp匹配是否正確

void

isbracketcorrect

(char exp,

int n)

else

if(exp[i]

==')'

&&stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c ==

'(')

else

if(exp[i]

==')'

&&stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c !=

'(')

else

if(exp[i]

==']'

&&stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c ==

'[')

else

if(exp[i]

==']'

&&stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c !=

'[')

else

if(exp[i]

=='}'

&&stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c ==

'else

if(exp[i]

=='}'

&&stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c !=

'elseif(

((exp[i]

==')')||

(exp[i]

==']')||

(exp[i]

=='}'))

&&!stacknotempty

(mystack))}

if(stacknotempty

(mystack)

)else

}//測試主函式:

void

main()

";//案例1,左右括號匹配次序不正確

char b=

"(()))abc"

;//案例2,右括號多於左括號

char c=

"(()()abc"

;//案例3,左括號多於又括號

char d=

"(())abc"

;//案例4,左右括號匹配正確

//各個字串的長度

int n1 =

strlen

(a);

int n2 =

strlen

(b);

int n3 =

strlen

(c);

int n4 =

strlen

(d);

//測試

isbracketcorrect

(a,n1)

;isbracketcorrect

(b,n2)

;isbracketcorrect

(c,n3)

;isbracketcorrect

(d,n4)

;}

括弧匹配檢驗 括號匹配問題

題目描述 假設表示式中允許包含兩種括號 圓括號和方括號,其巢狀的順序隨意,如 或 等為正確的匹配,或 或 均為錯誤的匹配。現在的問題是,要求檢驗乙個給定表示式中的括弧是否正確匹配?輸入乙個只包含圓括號和方括號的字串,判斷字串中的括號是否匹配,匹配就輸出 ok 不匹配就輸出 wrong 輸入乙個字串 ...

遞迴應用之括號匹配檢驗

括號匹配檢驗還可以用棧來解決,參見我的另一篇文章 棧的應用之括號匹配檢驗 這裡給出乙個c 程式,結合注釋來看是如何實現的。include using namespace std bool judge char str 括號檢驗主體函式 bool match char char,int 遞迴呼叫的匹配...

棧的應用 括號匹配檢驗

輸入包含括號的表示式,包含3中括號 圓括號 方括號,大括號 其巢狀順序隨意,即 或 等均為正確的輸入格式,檢驗輸入表示式中的括號是否匹配。源 bracketmatch.h ifndef bracketmatch h define bracketmatch h define maxsize 100 t...