算法Sedgewick第四版-第1章基础-014一用stack把前置表达式转为后置表达式并计算值
2016-04-19 17:29
405 查看
1.
2.
/************************************************************************* * Exercise 1.3.10 * * % java InfixToPostfix * ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) * 1 2 3 + 4 5 * * + * * % java InfixToPostfix * ( sqrt ( 1 + 2 ) ) * 1 2 + sqrt * *************************************************************************/ public class InfixToPostfix { public static void main(String[] args) { Stack<String> ops = new Stack<String>(); Stack<String> vals = new Stack<String>(); while (!StdIn.isEmpty()) { String s = StdIn.readString(); if (s.equals("(")) ; else if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/") || s.equals("sqrt")) ops.push(s); else if (s.equals(")")) { String op = ops.pop(); String v = vals.pop(); if (op.equals("+") || op.equals("-") || op.equals("*") || op.equals("/")) v = String.format("%s %s %s", vals.pop(), v, op); else if (op.equals("sqrt")) v = String.format("%s %s", v, op); vals.push(v); } else vals.push(s); } StdOut.println(vals.pop()); } }
2.
/************************************************************************* * Exercise 1.3.11 * * % java EvaluatePostfix * 1 2 3 + 4 5 * * + * 101.0 * * % java EvaluatePostfix * 1 5 sqrt + 2.0 / * 1.618033988749895 * * % java EvaluatePostfix * 12 9 - 105 7 / * * 45.0 * * % java InfixToPostfix | java EvaluatePostfix * ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) * 101.0 * * % java InfixToPostfix | java EvaluatePostfix * ( ( 1 + sqrt ( 5 ) ) / 2.0 ) * 1.618033988749895 * *************************************************************************/ public class EvaluatePostfix { public static void main(String[] args) { Stack<Double> vals = new Stack<Double>(); while (!StdIn.isEmpty()) { String s = StdIn.readString(); if (s.equals("(") || s.equals(")")) ; else if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/") || s.equals("sqrt")) { double v = vals.pop(); if (s.equals("+")) v = vals.pop() + v; else if (s.equals("-")) v = vals.pop() - v; else if (s.equals("*")) v = vals.pop() * v; else if (s.equals("/")) v = vals.pop() / v; else if (s.equals("sqrt")) v = Math.sqrt(v); vals.push(v); } else vals.push(Double.parseDouble(s)); } StdOut.println(vals.pop()); } }
相关文章推荐
- Regionals 2012 :: Chengdu
- d3中选择器后的enter()
- Views Relevant to Oracle Data Guard
- 配置apache的虚拟主机
- 算法训练 单词接龙
- 安卓探究ListView+Adapter数据在工作线程中更新引发的crash以及解决方法(三)
- EventBus3.0源码分析
- C#笔记一 .Net Framwork
- mybaits不能出现小于号
- foreach的实现原理
- sinatra - Ruby web application 轻量级框架
- studio 集成 Genymotion后打开模拟器出错、打开虚拟机VirtualBox出错
- ArrayList(一): JAVA中ArrayList类的用法
- Linux 服务器时间同步
- 懒人爱家务_添加广告
- delphi 错误信息
- Eclipse配置SQL Explorer插件和数据库
- 计算机网络学习笔记
- Happen-before
- 1-6-03:计算书费