数据结构实验之栈三:后缀式求值

来源:互联网 发布:c语言双人贪吃蛇 编辑:程序博客网 时间:2024/06/05 23:01

题目链接
Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Example Input
59*684/-3*+#
Example Output
57
Hint
基本操作数都是一位正整数!

#include<iostream>#include<cstring>#include<stack>using namespace std;int Calculate(int a, int b,char ch){    if(ch=='+')        return a+b;    else if(ch=='-')        return a - b;    else if(ch=='*')        return a*b;    else        return a/b;}int main(){    stack <int> S;    char s[110];    memset(s,0,sizeof(s));    for(int i = 0;;i++){        cin>>s[i];        if(s[i]=='#')            break;    }    int length = strlen(s);    for(int i = 0;i<length;i++){        if(s[i]=='#'){//到达末尾            cout<<S.top();//输出结果            S.pop();            break;        }        if(s[i]>='0'&&s[i]<='9')            S.push(s[i]-'0');//压栈        else{            int nm1, nm2;            nm1 = S.top();            S.pop();            nm2 = S.top();            S.pop();            S.push(Calculate(nm2,nm1,s[i]));//顺序不能颠倒,因为栈是后进先出        }    }    cout<<endl;    return 0;}