#pragmaonce#include<iostream>usingnamespace std;//顺序栈的存储结构#defineMAXSIZE100typedefstruct{int*base;//栈底指针int*top;//栈顶指针//栈可用的最大容量int stacksize;}SqStack;//顺序栈的初始化voidInitStack(SqStack& S){//构造一个空栈
S.base =newint[MAXSIZE];//存储分配失败if(!S.base){exit(1);}//栈顶指针等于栈底指针
S.top = S.base;//栈的最大容量
S.stacksize = MAXSIZE;}//顺序栈的入栈voidPush(SqStack& S,char e){//栈满if(S.top - S.base == S.stacksize){
cout <<"栈满"<< endl;exit(0);}*S.top = e;*S.top++;}//顺序栈的判空boolStackEmpty(SqStack S){if(S.top == S.base){returntrue;}else{returnfalse;}}//顺序栈的出栈voidPop(SqStack& S,char& e){if(StackEmpty(S)){
cout <<"栈空"<< endl;exit(0);}
S.top--;
e =*S.top;}//获取栈的第一个元素(访问栈顶元素)intGetTop(SqStack S){//栈非空 if(S.top!=S.base){//返回栈顶元素的值,栈顶指针不变return*(S.top-1);}}//判断读入字符是否为运算符boolIn(char e){if(e =='+'||
e =='-'||
e =='*'||
e =='/'||
e =='('||
e ==')'||
e =='#'){returntrue;//是运算符}else{returnfalse;//不是运算符}}//比较运算符的优先级//对照数据集书78页的表,a为纵轴值,b为横轴值charPrecede(char a,char b){char f;if(a =='+'|| a =='-'){if(b =='+'|| b =='-'|| b ==')'|| b =='#')
f ='>';elseif(b =='*'|| b =='/'|| b =='(')
f ='<';}elseif(a =='*'|| a =='/'){if(b =='+'|| b =='-'|| b =='*'|| b =='/'|| b ==')'|| b =='#')
f ='>';elseif(b =='(')
f ='<';}elseif(a =='('){if(b =='+'|| b =='-'|| b =='*'|| b =='/'|| b =='(')
f ='<';elseif(b ==')')
f ='=';}elseif(a ==')'){if(b =='+'|| b =='-'|| b =='*'|| b =='/'|| b ==')'|| b =='#')
f ='>';}elseif(a =='#'){if(b =='+'|| b =='-'|| b =='*'|| b =='/'|| b =='(')
f ='<';elseif(b =='#')
f ='=';}return f;}//计算二元运算结果charOperate(char a,char theta,char b){char c;//把a b 变成int类型
a = a -'0';
b = b -'0';if(theta =='+')//变成字符类型
c = a + b +'0';elseif(theta =='-')
c = a - b +'0';elseif(theta =='*')
c = a * b +'0';elseif(theta =='/')
c = a / b +'0';return c;}intEvaluateExpression(){
SqStack OPND, OPTR;char ch, a, b, theta, x;InitStack(OPND);InitStack(OPTR);Push(OPTR,'#');
cin>>ch;while(ch !='#'||GetTop(OPTR)!='#'){if(!In(ch)){Push(OPND, ch);
cin >> ch;}else{switch(Precede(GetTop(OPTR), ch)){case'<':Push(OPTR, ch);
cin >> ch;break;case'>':Pop(OPTR, theta);Pop(OPND, b);Pop(OPND, a);Push(OPND,Operate(a, theta, b));break;case'=':Pop(OPTR, x);
cin >> ch;break;}}}//变成int类型returnGetTop(OPND)-'0';}intmain(){
cout<<"请输入算术表达式,并以#结束"<<endl;
cout<<"结果是:"<<EvaluateExpression()<<endl;system("pause");return0;}