这个题目是大部分人都是用栈来写的,本周训练老师也讲了两次栈的原理。自己最近也看了数据结构中与栈有关的内容,还是比较深刻理解了没有括号情况下表达式求解。
#include#include #include using namespace std;char s[250],post[250];//s是输入的中缀表达式,post是转化出来的后缀表达式stack op;//存放运算符stack num;//存放运算过程中的数字int isnum(char c)//判断字符是否为数字{ if(c>='0'&&c<='9') return 1; return 0;}double opmode(char c)//运算符优先级判定{ if(c=='+') return 1; if(c=='-') return 2; if(c=='*') return 3; if(c=='/') return 4; return -1;}void change()//将中缀表达式转化为后缀表达式{ int i,j=0,len; memset(post,0,sizeof(post)); len=strlen(s); for(i=0; i 2)//栈顶运算符是*/时,才将栈顶的输出 { post[j++]=op.top(); op.pop(); } } op.push(s[i]);//优先级大时或者上面操作后将当前运算符入栈 } } while(!op.empty())//对象处理完毕将栈中存留的运算符一并输出 { post[j++]=op.top(); op.pop(); }}double cal()//计算后缀表达式{ while(!num.empty()) num.pop();//清空栈 int i=0,len; len=strlen(post); for(i=0;i
版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/