作业帮 > 综合 > 作业

用栈来判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对.编写并实现它的算法.

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/13 07:34:21
用栈来判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对.编写并实现它的算法.
用栈来判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对.编写并实现它的算法.
从左到右判断,遇上左括号就入栈,遇上右括号就弹出一个左括号!
如果栈空依旧需要弹出左括号,则右括号不配对!
如果表达式完成之后栈不空,则左括号不配对!
表达式完成,栈空!括号配对!
需要代码的话再hi我吧……
再问: 谢谢啦!需要代码!用c语言吧!
再答: 只要判断是否匹配,其他的不管吗? #include void main() { int n=0; //表明栈空 char c; while( (c=getchar()) != '\n') { if(c=='{' || c== '[' || c == '(') n++; //相当于入栈操作 if(c=='}' || c== ']' || c == ')') { if(n == 0) { printf("More right brackets!\n"); n--; break; } n--; //相当于出栈操作 } } if(n > 0) printf("More left brackets!\n"); else if(n != -1) printf("Brackets is matching!\n"); } ============================ 因为仅有一种括号,所以就简单的这样写了!
再问: 为什么输入(]也提示匹配呢?能详细点吗?
再答: 因为你的题目上说只有一种括号,所以我就这么简单的写了!如果需要括号类型也配对的话,就真正的需要用到栈了,代码如下: #include #include //========================================================== //栈的定义 //========================================================== //当前最顶数据的识标 int top; int capacity; //指向该结构体的指针 char* Pointer; //判断栈堆是否满 bool Full() { if(top == capacity) return true; else return false; } //判断栈堆是否空 bool Empty() { if(top == 0) return true; else return false; } void Stack(int size) { top=0; //top为0表示当前栈堆为空 capacity=size; Pointer =(char *)malloc(size*sizeof(char)); } //出栈 char* pop() { if(Empty()) return NULL; else { top--; return &Pointer[top]; } } //返回栈顶数据,不弹出 char* Get_top() { if(Empty()) return NULL; else { return &Pointer[top]; } } //入栈 bool push(char temp) { if(!Full()) { Pointer[top] = temp; top++; return true; } else { return false; } } //============================================= void main() { char c,temp; Stack(100); //构造栈,大小为100 while( (c=getchar()) != '\n') { if(c=='{' || c== '[' || c == '(') push(c); //入栈操作 if(c=='}' || c== ']' || c == ')') { if(Empty()) { printf("More right brackets!\n"); exit(0); } else { temp=*pop(); //弹出栈堆最顶部的数据 if(c == '}' && temp == '{')continue; if(c == ')' && temp == '(')continue; if(c == ']' && temp == '[')continue; printf("Brackets error!\n"); exit(0); } } } if(!Empty()) printf("More left brackets!\n"); else printf("Brackets is matching!\n"); } ===================================== 这个栈堆的操作是我直接从c++类里复制过来,有些是多余的,可删!
再问: 在win tc上运行错误!c语言啊!···