Dijkstra的双栈算术表达式求值算法
Posted 掬一束月光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dijkstra的双栈算术表达式求值算法相关的知识,希望对你有一定的参考价值。
1 public static double evaluate(String inStr) { 2 Stack<String> ops = new Stack<String>(); //操作符栈 3 Stack<Double> vals = new Stack<Double>(); //操作数栈 4 char[] arr = inStr.toCharArray(); 5 for(char c : arr){ 6 String s =c+""; 7 if(s.equals("")); 8 else if(s.equals("(")) ops.push(s); 9 else if(s.equals("+")) ops.push(s); 10 else if(s.equals("-")) ops.push(s); 11 else if(s.equals("*")) ops.push(s); 12 else if(s.equals("/")) ops.push(s); 13 else if(s.equals(")")){//如果是 )弹出操作符和操作数,计算结果并压入栈 14 String op = ops.pop(); 15 double v = vals.pop(); 16 if(op.equals("+")) v=vals.pop()+v; 17 else if(op.equals("-")) v=vals.pop()-v; 18 else if(op.equals("*")) v=vals.pop()*v; 19 else if(op.equals("/")) v=vals.pop()/v; 20 vals.push(v); 21 } 22 else vals.push(Double.parseDouble(s)); 23 } 24 return vals.pop(); 25 }
以上是关于Dijkstra的双栈算术表达式求值算法的主要内容,如果未能解决你的问题,请参考以下文章