數據結構實驗之棧三:後綴式求值
題目描述
對於一個基於二元運算符的後綴表示式(基本操作數都是一位正整數),求其代表的算術表達式的值。
輸入
輸入一個算術表達式的後綴式字符串,以‘#’作爲結束標誌。
輸出
求該後綴式所對應的算術表達式的值,並輸出之。
示例輸入
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;
}