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