假设一个算术表达式可以包含三种括号:圆括号,方括号和花括号,且这3种可按任意的的次序嵌套使用,

来源:百度知道 编辑:UC知道 时间:2024/06/01 22:50:31
编写判别给定表达式中所含括号是否正确配对出现的算法(已知表达式已存入数据元素为字符的的顺序表中

写起来代码会比较长,所以不写了告诉你怎么做:

1.建个堆栈,遇到( [ {就压栈,遇到) ] } 就看现在栈顶里放的跟遇到的是不是匹配。是,出栈,不是,报错。

2.如果遇到) ] } 栈为空,报错

3.所有输入完成时栈不为空,报错

亲,这是比较靠谱的答案了,求采纳啊。。。

void ExpIsCorrect(char exp[], int n)
//判断有n个字符的字符串exp左右括号是否配对正确
{ SeqStack myStack; int i; char c;
StackInitiate(&myStack);
for(i=0;i<n;i++)
{if((exp[i]=='(')||(exp[i]== '[')||(exp[i]== '{')) StackPush(&myStack, exp[i]);
else if(exp[i] == ')' && StackNotEmpty(myStack)
&& StackTop(myStack, &c) && c == '(')
StackPop(&myStack, &c);
else if(exp[i] == ')' && StackNotEmpty(myStack)
&& StackTop(myStack, &c) && c != '(')
{ printf("左右括号配对次序不正确!\n");
return;}
else if(exp[i] == ']' && StackNotEmpty(myStack)
&& StackTop(myStack, &c) && c == '[')
StackPop(&myStack, &c);
else if(exp[i] == ']' && StackNotEm