Ex1_3_10 中序转后序
  1. import edu.princeton.cs.algs4.StdIn;
  2. import edu.princeton.cs.algs4.StdOut;
  3. public class Ex1_3_10 {
  4. public static void main(String[] args){
  5. Stack<String> vals = new Stack<>();
  6. Stack<String> ops = new Stack<>();
  7. while (!StdIn.isEmpty()){
  8. String s = StdIn.readString();
  9. if(s.equals("("));
  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("/")) ops.push(s);
  14. else if(s.equals("sqrt")) ops.push(s);
  15. else if(s.equals(")")){
  16. String val = vals.pop();
  17. String op = ops.pop();
  18. if(op.equals("sqrt")){
  19. String temp = String.format("%s %s",val,op);
  20. vals.push(temp);
  21. }else{
  22. String temp = String.format("%s %s %s",vals.pop(),val,op);
  23. vals.push(temp);
  24. }
  25. }
  26. else vals.push(s);
  27. }
  28. StdOut.println(vals.pop());
  29. }
  30. }
  31. //( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) )转为1 2 + 3 4 - 5 6 - * *

要点:

  1. 使用双栈法的变形
  2. 中序表达式一定需要满足两个一组用括号括起