括号是否匹配–栈实现
题目:对于给定的简单算术表达式(只包含“+” “-“ ”*” “/“ “(” “)”),存放在字符数组expr[]中,长度为n。从左到右逐个字符扫描,利用栈(已提供的栈和基本操作,而且不会出现栈满的情况)设计一个括号是否匹配的算法。
个人理解:当扫描到“(”的时候将其入栈,扫描到“)”的时候就将栈中的“(”弹出,若是栈中还能弹出“(”,则与当前的“)”匹配。当扫描到“)”,但是栈已经为空时,则“)”多。若扫描完“)”,而栈中还存留“(”时,则“(”多。
void parenthsis(char expr[] , int n)
{
int i;
//初始化一个栈
Stack s = StackInit();
//利用循环遍历当前数组
for(i = 0;i < n; i++)
{
//遇见左括号则入栈
if(expr[i[ == '(') Push(s,expr[i]);
//遇见右括号则弹栈
else if(expr[i] == ')')
{
if(!StackEmptu(s)) Pop(s);
else
{ //栈空则不匹配
cout<<"当前的左括号比右括号少,不匹配"<<endl;
return;
}
//若是栈中存留着左括号,则不匹配
}
}
if(!StackEmpty(s)) cout<<"当前左括号比右括号多,不匹配"<<endl;
else cout<<"匹配"<<endl:
}