栈的应用-后缀表达式

来源:互联网 发布:特朗普 奥巴马 知乎 编辑:程序博客网 时间:2024/06/05 04:38

我看的是殷人昆版的《数据结构》,在栈的应用中,介绍了后缀表达式,下面由我为大家稍微说明下后缀表达式的定义.

后缀表达式:也叫RPN或逆波兰表达式。它是中缀表达式的替代形式。参加运算的操作数总在操作符前面。

例如:中缀表达式 A+B*(C-D)-E/F  对应的后缀表达式为:ABCD-*+EF/-


详细的后缀表达式的过程如上图所示, 利用栈的特性生成后缀表达式。


<span style="font-size:18px;">//后缀表达式#include <iostream>#include <assert.h>using namespace std;#include <stack>enum Type{OP_NUM,OP_SYMBOL,ADD,SUB,MUL,DIV,};struct Cell{Type _type;int _num;};int RPNCount(Cell a[], size_t size){stack<int> s;for (size_t i = 0; i < size; ++i){if (a[i]._type == OP_NUM){s.push(a[i]._num);}else{int left, right;right = s.top();s.pop();left = s.top();s.pop();switch(a[i]._num){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:cout<<"Invalid OP_SYMBOL"<<endl;exit(-1);}}}return s.top();}int main(){Cell RPNArray[] = {{OP_NUM, 12},{OP_NUM, 3},{OP_NUM, 4},{OP_SYMBOL, ADD},{OP_SYMBOL, MUL},{OP_NUM, 6},{OP_SYMBOL, SUB},{OP_NUM, 8},{OP_NUM, 2},{OP_SYMBOL, DIV},{OP_SYMBOL, ADD}};cout<<RPNCount(RPNArray, sizeof(RPNArray)/sizeof(Cell))<<endl;system("pause");return 0;}</span>



如有不正确的地方,希望能够指出,大家一起学习,谢谢了。

1 0
原创粉丝点击