#include<iostream>#include<malloc.h>#include <stdlib.h>#include <stdio.h>#define MAX 100using namespace std;//template <typename T> struct SqStack {int *base;int *top;int stacksize;};//*******************************************************基本操作函数原型int InitStack(SqStack &s);//创建一个空栈int StackEmpty(SqStack s);//判空int GetTop(SqStack s,int &e);//得到栈顶元素int Push(SqStack &s,int e);//进栈int Pop(SqStack &s,int &e);//出栈int In(char &c);//输入判断char Precede(SqStack &s,char &c);//比较优先级int Operate(int &i,int &k,int &j);//2个操作数之间的运算int main(){SqStack ope;SqStack num;//运算符、运算数char c;int i,k,j,sum=0;InitStack(ope);Push(ope,'#');InitStack(num);c=getchar();while((c!='#'||GetTop(ope,k)!='#')&&(c!='\n')){if(!In(c))//不是运算符 进数栈{Push(num,(int)c);}else{switch(Precede(ope,c)){case '<':Push(ope,c);c=getchar();break;case '=':Pop(ope,i);c=getchar();break;case '>':Pop(ope,k);Pop(num,j);Pop(num,i);Push(num,Operate(i,k,j));break;}}}GetTop(num,sum);cout<<"=="<<sum;}//*******************************************************基本操作的实现int InitStack(SqStack &s)//创建一个空栈 复制站提;也弄进去了“{”: 缺少函数标题(是否是老式的形式表?){s.base=(int *)malloc(MAX*sizeof(SqStack));if(!s.base) exit(-2);s.top=s.base;s.stacksize=MAX;return 1;}
int StackEmpty(SqStack s)//判空{return s.base==s.top;}
int GetTop(SqStack s,int &e)//得到栈顶元素{if(s.base==s.top) return -2;e=*(s.top-1);return 1;}
int Push(SqStack &s,int e)//进栈{*s.top++=e;return 1;}
int Pop(SqStack &s,int &e)//出栈{e=*(--s.top);return 1;}
int In(char &c)//输入判断{if (c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'){return 1;}elsereturn 0;}int Operate(int &i,int &k,int &j){int z;switch(char(k)){case '*':z=i*j;break;case '/':z=i/j;break;case '+':z=i+j;break;case '-':z=i-j;break;}return z;}char Precede(SqStack &s,char &c){int z;if(GetTop(s,z)=='+'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '<';if(c=='/') return '<';if(c=='(') return '<';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='-'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '<';if(c=='/') return '<';if(c=='(') return '<';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='*'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '>';if(c=='/') return '>';if(c=='(') return '<';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='/'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '>';if(c=='/') return '>';if(c=='(') return '<';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='('){if(c=='+') return '<';if(c=='-') return '<';if(c=='*') return '<';if(c=='/') return '<';if(c=='(') return '<';if(c==')') return '=';if(c=='#') return ' ';}else if(GetTop(s,z)==')'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '>';if(c=='/') return '>';if(c=='(') return ' ';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='('){if(c=='+') return '<';if(c=='-') return '<';if(c=='*') return '<';if(c=='/') return '<';if(c=='(') return '<';if(c==')') return ' ';if(c=='#') return '=';}else return ' ';}
int StackEmpty(SqStack s)//判空{return s.base==s.top;}
int GetTop(SqStack s,int &e)//得到栈顶元素{if(s.base==s.top) return -2;e=*(s.top-1);return 1;}
int Push(SqStack &s,int e)//进栈{*s.top++=e;return 1;}
int Pop(SqStack &s,int &e)//出栈{e=*(--s.top);return 1;}
int In(char &c)//输入判断{if (c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'){return 1;}elsereturn 0;}int Operate(int &i,int &k,int &j){int z;switch(char(k)){case '*':z=i*j;break;case '/':z=i/j;break;case '+':z=i+j;break;case '-':z=i-j;break;}return z;}char Precede(SqStack &s,char &c){int z;if(GetTop(s,z)=='+'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '<';if(c=='/') return '<';if(c=='(') return '<';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='-'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '<';if(c=='/') return '<';if(c=='(') return '<';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='*'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '>';if(c=='/') return '>';if(c=='(') return '<';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='/'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '>';if(c=='/') return '>';if(c=='(') return '<';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='('){if(c=='+') return '<';if(c=='-') return '<';if(c=='*') return '<';if(c=='/') return '<';if(c=='(') return '<';if(c==')') return '=';if(c=='#') return ' ';}else if(GetTop(s,z)==')'){if(c=='+') return '>';if(c=='-') return '>';if(c=='*') return '>';if(c=='/') return '>';if(c=='(') return ' ';if(c==')') return '>';if(c=='#') return '>';}else if(GetTop(s,z)=='('){if(c=='+') return '<';if(c=='-') return '<';if(c=='*') return '<';if(c=='/') return '<';if(c=='(') return '<';if(c==')') return ' ';if(c=='#') return '=';}else return ' ';}