【例】C语言里算术表达式中的括号只有小括号。编写算法,判断一个表达式中的括号是否正确配对,表达式已经存入字符数组exp[]中,表达式中的字符个数为n。
- 标准版
int match(char exp[],int n){
char stack[maxSize]; //maxSize 是已定义的常量
int top=-1;
int i;
for(i=0;i<n;++i){
if(exp[i]=='(')
stack[++top]='(';
else if(exp[i]==')'){
if(top==-1)
return 0;
else
--top;
}
}
if(top==-1)
return 1;
else
return 0;
}
- 解析版
int match(char exp[],int n){
/* 创建一个栈,用来存放左括号 */
char stack[maxSize];
int top=-1;
for(int i=0;i<n;++i){ //遍历数组中的元素
if(exp[i]=='(') //遇见左括号就进栈
stack[++top]='(';
else if(exp[i]==')'){ //每遇见一个右括号,则出栈一个左括号
if(top==-1) //栈中没有左括号了,说明进栈少出栈多,右括号的数量多余左括号
return 0;
else
--top; //栈中有左括号,则出栈一个左括号
}
}
if(top==-1) //循环结束,若栈为空,说明进栈和出栈的次数一样多,则左括号和右括号一样多,数量匹配
return 1;
else
return 0; //若栈不为空,说明进栈多出栈少,左括号的数量多余右括号
}
/* 一句话总结:创栈,遇左进,遇右出,栈空对,不空错 */