使用棧存儲後綴表達式

12*(3+4)-6+8/2的後綴表達式爲:12 3 4 + * 6 - 8 2 / +
使用棧模擬存儲後綴表達式:

#include<iostream>
#include<stack>
using namespace std;

enum OPERATOR//使用枚舉類型
{
    DATA,
    ADD,
    SUB,
    MUL,
    DIV
};

struct Cell
{
    OPERATOR _operator;//符號
    int _data;//數據
};

int CalaRPN(Cell* cell,size_t size)
{
    stack<int> s; 
    for(size_t idx=0;idx<size;++idx)
    {
        if(cell[idx]._operator==DATA)
            s.push(cell[idx]._data);
        else
        {
            int right=s.top();
            s.pop();
            int left=s.top();
            s.pop();
            switch(cell[idx]._operator)
            {
            case ADD:
                s.push(left+right);
                break;
            case SUB:
                s.push(left-right);
                break;
            case MUL:
                s.push(left*right);
                break;
            case DIV:
                if(0==right)
                {
                    cout<<"除數爲0"<<endl;
                    abort();
                }
                s.push(left/right);
                break;
            default:
                cout<<"非法操作"<<endl;
                break;
            }
        }       
    }
    return s.top();
}

int main()
{
    Cell cell[]={
        {DATA,12},
        {DATA,3},
        {DATA,4},
        {ADD,0},
        {MUL,0},
        {DATA,6},
        {SUB,0},
        {DATA,8},
        {DATA,2},
        {DIV,0},
        {ADD,0}};
    cout<<CalaRPN(cell,sizeof(cell)/sizeof(cell[0]))<<endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章