题目:逆波兰表达式(后缀表达式的求解)
<span style="font-size:18px;">#include<iostream>
#include<stack>
using namespace std;
enum type
{
OP_NUM,
OP_SYMBLE,
ADD,
SUB,
MUL,
DIV
};
struct Cell
{
type _type;
int _value;
};
int RPN_ARRAY(Cell Array[], size_t size )
{
size_t i = 0;
stack<int > s;
for (i = 0; i< size ; i++)
{
if (Array [i]._type == OP_NUM)
{
s.push( Array[i]._value);
}
else
{
int right = s.top();
s.pop();
int left = s.top();
s.pop();
switch (Array [i]._value)
{
case ADD :
s.push(left+right);
break;
case SUB :
s.push(left - right);
break;
case MUL :
s.push(left * right);
break;
case DIV :
s.push(left / right);
break;
default:
break;
}
}
}
return s.top();
}
void funtest()
{
Cell Array[] =
{
{ OP_NUM, 12 },
{ OP_NUM, 3 },
{ OP_NUM, 4 },
{ OP_SYMBLE, ADD },
{ OP_SYMBLE, MUL },
{ OP_NUM, 6 },
{ OP_SYMBLE, SUB },
{ OP_NUM, 8 },
{ OP_NUM, 2 },
{ OP_SYMBLE, DIV },
{ OP_SYMBLE, ADD }
};
size_t size = sizeof (Array) / sizeof(Array[0]);
int ret = RPN_ARRAY(Array, size);
cout << ret << endl;
}
int main()
{
funtest();
getchar();
return 0;
}</span>