您的位置:首页 > 理论基础 > 数据结构算法

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

2016-05-22 09:56 239 查看
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。

输入

输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。

输出

求该后缀式所对应的算术表达式的值,并输出之。

示例输入

59*684/-3*+#示例输出

57

题解:这道题用栈来做,首先你输入的是字符,因此在输入的是数字的时候,应该把它转化成相应的整形,放的栈里,接下来就简单了,遇到数字就入栈,遇到运算符号就把栈顶的两个数进行运算,再将这两个数出栈,将得到的结果入栈。

#include<bits/stdc++.h>

using namespace std;

int main()

{

int n,m;

char ch;

stack<int> num;

while(scanf("%c",&ch)!=EOF&&ch!='#')

{

if(ch=='-'||ch=='+'||ch=='*'||ch=='/')

{

if(ch=='-')

{

m=num.top();

num.pop();

m=num.top()-m;

num.pop();

num.push(m);

}

else if(ch=='*')

{

m=num.top();

num.pop();

m=num.top()*m;

num.pop();

num.push(m);

}

else if(ch=='+')

{

m=num.top();

num.pop();

m=num.top()+m;

num.pop();

num.push(m);

}

else  if(ch=='/')

{

m=num.top();

num.pop();

m=num.top()/m;

num.pop();

num.push(m);

}

}

else

{

n=(int)ch-48;//将字符转化成整形

cout<<n<<" ";

num.push(n);

}

}

cout<<num.top();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: