使用栈存储后缀表达式

来源:互联网 发布:js调用function函数 编辑:程序博客网 时间:2024/05/17 00:12

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