Dijkstra的双栈算术表达式求值算法
2016-07-05 20:04
323 查看
注:不考虑乘除优先级,使用括号确定计算顺序
测试:
String s = "(1+(3*4)+3)";
System.out.println(evaluate(s));
15
public static double evaluate(String inStr) { Stack<String> ops = new Stack<String>(); //操作符栈 Stack<Double> vals = new Stack<Double>(); //操作数栈 char[] arr = inStr.toCharArray(); for(char c : arr){ String s =c+""; if(s.equals("")); else if(s.equals("(")) ops.push(s); else if(s.equals("+")) ops.push(s); else if(s.equals("-")) ops.push(s); else if(s.equals("*")) ops.push(s); else if(s.equals("/")) ops.push(s); else if(s.equals(")")){//如果是 )弹出操作符和操作数,计算结果并压入栈 String op = ops.pop(); double v = vals.pop(); if(op.equals("+")) v=vals.pop()+v; else if(op.equals("-")) v=vals.pop()-v; else if(op.equals("*")) v=vals.pop()*v; else if(op.equals("/")) v=vals.pop()/v; vals.push(v); } else vals.push(Double.parseDouble(s)); } return vals.pop(); }
测试:
String s = "(1+(3*4)+3)";
System.out.println(evaluate(s));
15
相关文章推荐
- VB修改Louts Notes默认浏览器设置
- Java并发编程:并发容器之CopyOnWriteArrayList(转载)
- 让未来,现在就来(一):基业长青
- git 新浪云
- 大数据到底什么,大数据科普
- SSH 服务启动时出现如下错误:fatal: Cannot bind any address
- 类与对象基础知识(二)
- 函数节流
- 类的常用特征
- 1691.Abundance
- poi获取excel2003,excel2007,ppt2007图表类型
- 第二十节,基本数据类型,集合set、综合应用新数据更新老数据
- Matlab将视频解析成图像帧
- 欢迎使用CSDN-markdown编辑器
- 微信公众平台接口简单介绍
- virtualenvwrapper安装使用
- golang zip 压缩,解压(含目录文件)
- Linux的多任务多进程
- 三维重建(一)外极几何,基础矩阵及求解
- yii2 ActiveRecord多表关联以及多表关联搜索的实现