數據結構實驗之棧三:後綴式求值

數據結構實驗之棧三:後綴式求值

題目描述

對於一個基於二元運算符的後綴表示式(基本操作數都是一位正整數),求其代表的算術表達式的值。

輸入

輸入一個算術表達式的後綴式字符串,以‘#’作爲結束標誌。

輸出

求該後綴式所對應的算術表達式的值,並輸出之。

示例輸入

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章