题目:从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$
代码:
#includeusing namespace std; typedef struct { int* base; int* top; int stacksize; }SqStack; void IntiStack(SqStack& S) { S.base = new int[100]; if (!S.base) exit(OVERFLOW); S.stacksize = 100; S.top = S.base; return; } void Push(int e,SqStack& S) { if (S.top-S.base==100) exit(OVERFLOW); *(S.top++) = e; return; } void Pop(int& e, SqStack& S) { if (S.top == S.base) { cout << "出栈失败,栈空" << endl; return; } e = *--S.top; return; } int calmulate(char str1[100],SqStack&Num) { int e = 0; int a = 0; for (int i = 0; i < 100; i++) { //如果扫描位是数字 if(str1[i]>47&&str1[i]<58) e = e * 10 + (str1[i]-48); else{ switch (str1[i]) { case ' ': Push(e, Num); break; case'+': Pop(a, Num); Push(a + e, Num); break; case'-': Pop(a, Num); Push(a - e, Num); break; case'*': Pop(a, Num); Push(a * e, Num); break; case'/': Pop(a, Num); Push(a / e, Num); break; case'$': Pop(a, Num); return a; } e = 0; } if (i == 99 && str1[i] != '$'){ cout << "错误,请输入“$”作为表达式结尾" << endl; exit(1); } } } int main() { SqStack Num; IntiStack(Num); //初始化数字栈 char str1[100]; cout << "请输入后缀表达式:" << endl; cin.getline(str1,100); cout<<"结果是"<



