C語言解決堆棧括號匹配問題示例詳解
1.括號匹配問題就是當(dāng)遇到{( [這些左括號的時 將括號字符入棧
2.當(dāng)遇到右括號時判斷棧頂元素是不是與左括號匹配如果匹配就出棧
如果不匹配就直接結(jié)束程序(即括號匹配失?。?/p>
首先構(gòu)建棧
struct STACK
{
char num[10];
int top;
};
struct STACK* creatstack()
{
struct STACK* stack = new struct STACK;
assert(stack);
stack->top = -1;//0 -1這些根據(jù)直接所習(xí)慣去標(biāo)記棧頂 -1只是先置加 0后置加
return stack;
}
void push(struct STACK* stack, char ch)
{
stack->num[++stack->top] = ch;
}
void pop(struct STACK* stack)
{
stack->top--;
}
調(diào)用匹配函數(shù)
如果返回true即匹配成功 返回false即匹配失敗
bool Match(struct STACK* stack, char* match)
{
int len = strlen(match);
for (int i = 0; i < len; ++i)
{
if (match[i] == '{' || match[i] == '[' || match[i] == '(')
{
push(stack, match[i]);
}
if (match[i] == '}' )
{
if (stack->num[stack->top] == '{')
{
pop(stack);
}
else
{
return false;
}
}
if (match[i] == ')' )
{
if (stack->num[stack->top] == '(')
{
pop(stack);
}
else
{
return false;
}
}
if (match[i] == ']' )
{
if (stack->num[stack->top] == '[')
{
pop(stack);
}
else
{
return false;
}
}
}
if (stack->top == -1)
return true;
else
{
return false;
}
}
代碼調(diào)用
如果是輸出1說明匹配成功 輸出0匹配不成功
int main()
{
struct STACK* stack = creatstack();
char str[10] = "()[][]{}";
cout << Match(stack ,str)<< endl;
}
以上就是C語言堆棧括號匹配問題示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語言堆棧括號匹配的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用c語言根據(jù)可變參數(shù)合成字符串的實現(xiàn)代碼
本篇文章是對用c語言根據(jù)可變參數(shù)合成字符串的方法進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++中實現(xiàn)隊列類鏈?zhǔn)酱鎯εc棧類鏈?zhǔn)酱鎯Φ拇a示例
這篇文章主要介紹了C++中實現(xiàn)隊列類鏈?zhǔn)酱鎯εc棧類鏈?zhǔn)酱鎯Φ拇a示例,通過注釋來說明,直接上代碼,簡單粗暴XD 需要的朋友可以參考下2016-03-03
使用C++的string實現(xiàn)高精度加法運算的實例代碼
下面小編就為大家?guī)硪黄褂肅++的string實現(xiàn)高精度加法運算的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
詳解C++成員函數(shù)的override和final說明符的用法
這篇文章主要介紹了詳解C++成員函數(shù)的override和final說明符的用法,分別用于重寫和禁止繼承類,要的朋友可以參考下2016-01-01

