题目:假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别表达式中的括号是否配对,以字符"\0"作为算术表达式的结束符。
解题思想:
括号匹配是栈的经典应用,给出这道题是希望读者好好掌控栈的应用。算法的基本思想是扫描每一个字符,遇到花,中,园的左括号时就进栈,遇到花,中,园的右括号时检查栈顶元素是否为对应的右括号,若是,退栈,否则配对错误。最后栈若不为空也为错误。
代码如下:
bool BracketsCheck(char *str){
InitStack(S);
int i=0;
while(str[i]!='\0'){
switch(str[i]){
//左括号入栈
case: '(': Push(S,'C');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
}//while
if(!IsEmpty(S)){
printf("括号不匹配");
return false;
}
else{
printf("括号匹配");
return true;
}
}