简易实现后缀表达式
来源:互联网 发布:360怎么禁止软件联网 编辑:程序博客网 时间:2024/05/20 15:57
同样为栈的应用程序之一,关于后缀表达式的概念我们不在赘述,直接来实现。
enum OPERATOR //这个枚举类型是为了更好的存储数据建立的{ADD,SUB,MUL,DIV,DATA};class Cell{public:Cell(OPERATOR op,int DATA):_op(op),data(DATA){}OPERATOR _op;int data;};int CalcRPN(Cell* RPN, int size){int i = 0;stack<int> s; //在这里我们同样是建立了一个栈来进行数据的存储for (i = 0; i < size; i++){if (RPN[i]._op == DATA) //在这里判断,如果此类型是data,我们就将数据压入栈内{s.push(RPN[i].data);}else //其他情况的话就代表这个数据是一个运算符,我们就进行相应的操作{int left = 0; //如果读取到一个运算符的话,我们就将栈顶的第一元素拿出来作为右边的数值,第二个元素拿出来作为左参数进行运算
int right = 0; //运算结束后,将所得结果压入栈内,做后续运算right = s.top(); s.pop();left = s.top();s.pop();switch (RPN[i]._op){case ADD:s.push(right + left);break;case SUB:s.push(left - right);break;case MUL:s.push(right * left);break;case DIV:if (right == 0){cout << "除数为零,算式错误!" << endl;assert(0);}s.push(left / right);break;default:assert(0);break;}}}return s.top(); //最后我们将栈顶元素返回,即为所求结果}这个实现是极为简单的,不考虑括号等优先级的问题,只进行最简单的运算,接下来我们来试验下它是否正确
int main()//12*(3+4)-6+8/2 //我们给出的式子所得结果应该为82{Cell RPN[] = { {DATA,12}, {DATA,3},{DATA,4},{ADD,0},{MUL,0},{DATA,6},{SUB,0},{DATA,8},{DATA,2},{DIV,0},{ADD,0} };int size = sizeof(RPN) / sizeof(RPN[0]);cout << CalcRPN(RPN, size) << endl;getchar();return 0;}
这就是一个简易后缀表达式的实现。
阅读全文
0 0
- 简易实现后缀表达式
- 中缀表达式转换为后缀表达式 简易实现(c++)(简易表达式计算)
- C语言简易计算器(中缀表达式转后缀表达式,通过堆栈实现)
- C++实现后缀表达式
- 用栈来实现后缀表达式
- 后缀表达式实现表达式求值
- 正则表达式简易实现
- 中缀表达式转后缀表达式的简易方法
- 堆栈实现,计算后缀表达式
- 【数据结构】后缀表达式算法实现
- 后缀表达式的java实现
- 栈实现后缀表达式求值
- 后缀表达式(java实现)
- 计算器实现---中缀表达式转后缀表达式
- 栈实现中缀表达式转为后缀表达式
- java 实现中缀表达式转为后缀表达式
- 中缀表达式转成后缀表达式 C实现
- 中缀表达式、后缀表达式 Java实现
- 编写一个函数link_sort(),用链表将数组int a[] = {49, 38, 65, 97, 76, 13, 27} 按升序排序
- 剑指offer 输出链表倒数第k个结点
- oracle和mysql在创建表、更新表(增加、修改、删除字段)、删除表的区别与联系
- Eclipse 项目导入 Android Studio,依赖项目不让 copy 到 Android Studio 项目
- 二叉树的遍历
- 简易实现后缀表达式
- 快手2017校园招聘_笔试_面试
- 实现checkBox readonly功能的两种方式
- hdu_1102_prime
- flume+kafka+storm
- Java技术——你真的了解String类的intern()方法吗
- mysql数据库
- 最简单的vue上传图片
- hashMap的负载因子的大小与查询效率和内存空间的比例关系。