#include<iostream>
#include<stack>
using namespace std;
enum Type
{
ADD,
SUB,
MUL,
DIV,
OP_NUM,
};
struct Cell
{
Type _type;
int num;
};
Cell RPNexp[] = {
OP_NUM, 12,
OP_NUM, 3,
OP_NUM, 4,
ADD, 0,
MUL, 0,
OP_NUM, 6,
SUB, 0,
OP_NUM, 8,
OP_NUM, 2,
DIV, 0,
ADD, 0,
};
int CountExp(Cell RPNexp[], int size)
{
stack<int> s1;
for (int i = 0; i < size; i++)
{
int right;
int left;
switch (RPNexp[i]._type)
{
case ADD:
right = s1.top();
s1.pop();
left = s1.top();
s1.pop();
s1.push(left + right);
break;
case SUB:
right = s1.top();
s1.pop();
left = s1.top();
s1.pop();
s1.push(left - right);
break;
case MUL:
right = s1.top();
s1.pop();
left = s1.top();
s1.pop();
s1.push(left * right);
break;
case DIV:
right = s1.top();
s1.pop();
left = s1.top();
s1.pop();
s1.push(left / right);
break;
case OP_NUM:
s1.push(RPNexp[i].num);
break;
default:
break;
}
}
return s1.top();
}
int main()
{
int ret = CountExp(RPNexp, sizeof(RPNexp) / sizeof(Cell));
cout << "ret=" << ret << endl;
system("pause");
return 0;
}
【C++】栈处理后缀表达式
最新推荐文章于 2022-10-13 08:36:34 发布