RPN简单实现
来源:互联网 发布:中国软件培训 编辑:程序博客网 时间:2024/06/02 23:31
注意:结构实现的巧妙性
#include <iostream>using namespace std;#include <assert.h>#include <stack>enum Type//定义类型,操作数和操作符{ OP_SYMBOL, OP_NUM, ADD, SUB, MUL, DIV,};struct Cell//单元{ Type _type; int _value;};int CountRPN(Cell *rpn,size_t n)//注意传指针,RPN为数组{ assert(rpn); stack<int> s; for (size_t i = 0; i < n;++i) { if (rpn[i]._type == OP_SYMBOL)//注意取操作数时,顺序问题,如左右操作数不同可能影响结果,如:除法 { int right = s.top(); s.pop(); int left = s.top(); s.pop(); switch (rpn[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: assert(false); } } else if (rpn[i]._type == OP_NUM) s.push(rpn[i]._value); } return s.top();}//测试函数void Funtest(){ Cell RPN[] = { { 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 << CountRPN(RPN, sizeof(RPN) / sizeof(RPN[0]));}int main(){ Funtest(); getchar(); return 0;}
0 0
- RPN简单实现
- RPN
- 逆波兰表示法RPN 实现
- 基于逆波兰RPN算法的计算器实现
- RPN算法
- RPN delphi
- 纯C++版的Faster-Rcnn(通过caffe自定义RPN层实现)
- 纯C++版的Faster-Rcnn(通过caffe自定义RPN层实现)
- faster RCNN的c++接口 通过用c++重写RPN层实现
- 求解后缀表达式(RPN)
- 逆波兰表达式rpn
- MIDI-PITCHBEND-RPN
- Shunting+yard -- RPN 算法
- 7.25 RPN转换
- 模板栈RPN计算器
- RPN+RCNN的改进
- 区域推荐网络RPN
- Faster-RCNN检测-RPN
- OpenCV摄像头标定(Calibration) 使用源代码
- 当Android遇见工厂模式
- kafka三个节点集群环境搭建-详细步骤
- 随笔杂记(一)
- PHP学习道路上的那些坑
- RPN简单实现
- 电脑主机选购---内存条,光驱
- 总结39
- ubuntu下Nao机器人平台搭建
- 51nod 1052 最大M子段和
- C语言之文本输入输出一些记点
- java多态详解
- 闭包详解
- CodeForces 140E