1.括號匹配
int isbrackets(char ch)//判斷括號函式
' == ch))
return0;}
void matchbrackets(const
char *str)
ch = stacktop(&s);
if (!(('(' == ch && ')' == str[i])
|| ('[' == ch && ']' == str[i])
|| ('' == str[i])))//檢測當前括號是否與棧頂括號匹配
stackpop(&s);}}
}if (stackempty(&s))
printf("括號匹配正確!\n");
else
printf("左括號比右括號多!!!\n");
}int main()
";//左右括號次序匹配不正確
char b = "(()))abc";//右括號比左括號多
char c = "(()()abc";//左括號比右括號多
char d = "(())abc";//左右括號匹配正確
matchbrackets(a);
matchbrackets(b);
matchbrackets(c);
matchbrackets(d);
system("pause");
return
0;}
程式輸出結果:
2.逆波蘭函式
//12 3 4 + * 6 - 8 2 / +
//列舉
enum ;
//定義乙個結構體分別存放符號和資料
typedef
struct rpn
rpn;
int _rpn(rpn *p, int size)
else
//為其他則說明是符號,將棧中元素出棧,先出的為右運算元
}p++;
}return stacktop(&s);
}int main()
, , ,
, , , ,
, , , };
int size = sizeof(p) / sizeof(p[0]);
printf("%d\n", _rpn(p, size));
system("pause");
return
0;}
程式輸出結果為:8 棧應用 括號匹配和逆波蘭表示式
stack宣告見前文 括號匹配 匹配串類似 abc 思路 乙個指標遍歷串,如是左括號入棧,右括號則出棧並於當前指標比較是否匹配。再指標指向 0,並且棧為空時才是匹配模式 匹配成功返回1 int match brackets const char string stack s init s 考慮左括號...
利用棧解決括號匹配和逆波蘭表示式
當我們學習了棧這種資料結構滯後,我們就可以利用棧來解決一些實際問題。這裡是我們給出的動態順序棧的實現 template class t class stack void push const t data void pop bool empty t top t top const size t si...
棧解決 括號匹配問題和逆波蘭表示式
所需知識 棧 字串 思路分析 有如下四組字串 如何檢測左右括號順序與個數是否匹配 char a abc char b abc char c abc char d abc 1 解決 1 當讀到乙個左括號的字元,包括 時,檢測棧頂元素是否為與之匹配的左括號,若是,證明這一對括號匹配,將這個左括號出棧繼續...