题目:
设表达式以字符形式已存入数组E[n]中,‘#’表达式中的结束符,试写出判断表达式中括号【‘(’和‘)’】是否配对的c语言描述算法:EXYX(E);
分析:
①题中已说明只需判断【‘(‘ ‘)’】,因此不需再判断中括号或大括号;
int EXYX(char E[],int n){
// E[n]是有n个字符的字符数组,存放字符串表达式
char s[30]; //s是一维数组,容量足够大,用作存放括号的栈
int top=0; //栈s的栈顶指针
s[top]='#'; //'#'先入栈,用于和表达式结束符号'#'匹配
int i=0; //字符数组E的工作指针
while(E[i]!='#'){
switch(E[i]){
case'(': s[++top]='(';i++;break; //左括号进栈
case')': //右括号进行匹配判断
if(s[top]=='(') {top--;i++;break;} //若符号栈栈顶元素是左括号,则符号栈退栈
else{ printf("括号不配对\n");return(0);} //否则不配对,算法结束
case'#': //结束时判断符号栈栈顶元素是否也为结束符
if(s[top]=='#') {print("括号配对\n");return(1);}
else{printf("括号不配对\n");return(0); }
default: i++; //读入其他字符,不作处理
}
}
}