用栈来判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对.编写并实现它的算法.
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/08 09:24:30
用栈来判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对.编写并实现它的算法.
从左到右判断,遇上左括号就入栈,遇上右括号就弹出一个左括号!
如果栈空依旧需要弹出左括号,则右括号不配对!
如果表达式完成之后栈不空,则左括号不配对!
表达式完成,栈空!括号配对!
需要代码的话再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语言啊!···
如果栈空依旧需要弹出左括号,则右括号不配对!
如果表达式完成之后栈不空,则左括号不配对!
表达式完成,栈空!括号配对!
需要代码的话再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语言啊!···
用栈来判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对.编写并实现它的算法.
编写一个判断算术表达式中开括号闭括号是否配对的算法
编写一个表达式中括号是否正确配对的算法
在Java中,设计一个算法,判断一个算术表达式中的括号是否配对.
分不多,数据结构,试写一个判别表达式中开、闭括号是否配对出现的算法.
试写一个判别表达式中括号是否配对出现的算法.
表达式括号匹配问题一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套,编写程序判断表达式中的括号是否正确匹配.输
试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.
C语言用栈写一个判断输入的表达式的括号是否正确的算法?
2.循环向量中的循环队列.队列的长度公式是什么?如何判断一个算术表达式的园括号是否正确配对?
输入一行表达式,判断该表达式中的括号是否匹配.括号要求符合C++表达式的要求.若左括号与右括号匹配,则
括号配对检查问题对输入的一段C或者C++代码(只要求其中一种),检查各种括号是否配对,以及配对的情况.基本要求:对于输入