栈在括号匹配中的应用
题目描述:
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法判别表达式中括号是否匹配,以字符‘\0’作为算术表达式的结束符。
算法思想:
扫描每个字符,遇到圆、方、花的左括号是进栈,遇到圆、方、花的右括号时检查栈顶元素是否为相应的左括号,若是,退栈,否则匹配错误。最后栈不为空也为错误。
bool BracketCheck(char *str)
{
InitStack(S); //初始化栈
int i=0;
while(str[i]!='\0')
{
switch(str[i]){
//左括号入栈
case'(':Push(S,'('); break;
case'[':Push(S,'['); break;
case'{':Push(S,'{'); break;
//遇到右括号检测栈顶
case')':Pop(S,e);
if(e!='(')
return false;
break;
case']':Pop(S,e);
if(e!='[')
return false;
break;
case'}':Pop(S,e);
if(e!='{')
return false;
break;
default:break;
} //switch
i++;
} //while
if(!IsEmpty(S)){
printf("括号不匹配\n");
return false;
}
else{
printf("括号匹配\n");
return true;
}
}