数据结构实验之栈三:后缀式求值
题目描述
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
输入
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
输出
求该后缀式所对应的算术表达式的值,并输出之。
示例输入
59*684/-3*+#
示例输出
57
提示
基本操作数都是一位正整数!
#include <bits/stdc++.h>
using namespace std;
stack<int>Q; //建立栈
void cal(char str[])
{
int i,j=0;
int num[100];
for(i=0; str[i]!='#'; i++)
{
if(str[i]>='0'&&str[i]<='9') //从左到右读入后缀表达式,若读到的是数字则压入栈中
{
num[j++]=str[i]-'0';
}
else //若是操作符则进行相应的运算
{
int n=num[j-2],m=num[j-1]; //提取栈顶的两个元素
int k; //存储计算值
if(str[i]=='+')
k=n+m;
else if(str[i]=='-')
k=n-m;
else if(str[i]=='*')
k=n*m;
else if(str[i]=='/')
k=n/m;
j=j-2; //删除已运算完的数
num[j++]=k;
}
}
cout<<num[0]; //输出结果
}
int main()
{
char str1[110];
scanf("%s",str1);
cal(str1);
cout<<endl;
return 0;
}