算法Sedgewick第四版-第1章基础-014一用stack把前置表达式转为后置表达式并计算值

1.

 1 /*************************************************************************
 2  *  Exercise 1.3.10
 3  *
 4  *  % java InfixToPostfix
 5  *  ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
 6  *  1 2 3 + 4 5 * * +
 7  *
 8  *  % java InfixToPostfix
 9  *  ( sqrt ( 1 + 2 ) )
10  *  1 2 + sqrt
11  *
12  *************************************************************************/
13
14 public class InfixToPostfix
15 {
16     public static void main(String[] args)
17     {
18         Stack<String> ops  = new Stack<String>();
19         Stack<String> vals = new Stack<String>();
20
21         while (!StdIn.isEmpty())
22         {
23             String s = StdIn.readString();
24
25             if      (s.equals("("))               ;
26             else if (s.equals("+") ||
27                      s.equals("-") ||
28                      s.equals("*") ||
29                      s.equals("/") ||
30                      s.equals("sqrt")) ops.push(s);
31             else if (s.equals(")"))
32             {
33                 String op = ops.pop();
34                 String v = vals.pop();
35
36                 if (op.equals("+") ||
37                     op.equals("-") ||
38                     op.equals("*") ||
39                     op.equals("/"))
40                     v = String.format("%s %s %s", vals.pop(), v, op);
41                 else if (op.equals("sqrt"))
42                     v = String.format("%s %s", v, op);
43
44                 vals.push(v);
45             }
46             else vals.push(s);
47         }
48
49         StdOut.println(vals.pop());
50     }
51 }

2.

 1 /*************************************************************************
 2  *  Exercise 1.3.11
 3  *
 4  *  % java EvaluatePostfix
 5  *  1 2 3 + 4 5 * * +
 6  *  101.0
 7  *
 8  *  % java EvaluatePostfix
 9  *  1 5 sqrt + 2.0 /
10  *  1.618033988749895
11  *
12  *  % java EvaluatePostfix
13  *  12 9 - 105 7 / *
14  *  45.0
15  *
16  *  % java InfixToPostfix | java EvaluatePostfix
17  *  ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
18  *  101.0
19  *
20  *  % java InfixToPostfix | java EvaluatePostfix
21  *  ( ( 1 + sqrt ( 5 ) ) / 2.0 )
22  *  1.618033988749895
23  *
24  *************************************************************************/
25
26 public class EvaluatePostfix
27 {
28     public static void main(String[] args)
29     {
30         Stack<Double> vals = new Stack<Double>();
31
32         while (!StdIn.isEmpty())
33         {
34             String s = StdIn.readString();
35
36             if      (s.equals("(") ||
37                      s.equals(")")) ;
38             else if (s.equals("+") ||
39                      s.equals("-") ||
40                      s.equals("*") ||
41                      s.equals("/") ||
42                      s.equals("sqrt"))
43             {
44                 double v = vals.pop();
45
46                 if      (s.equals("+"))    v = vals.pop() + v;
47                 else if (s.equals("-"))    v = vals.pop() - v;
48                 else if (s.equals("*"))    v = vals.pop() * v;
49                 else if (s.equals("/"))    v = vals.pop() / v;
50                 else if (s.equals("sqrt")) v = Math.sqrt(v);
51
52                 vals.push(v);
53             }
54             else
55                 vals.push(Double.parseDouble(s));
56         }
57
58         StdOut.println(vals.pop());
59     }
60 }
时间: 2024-10-31 10:56:36

算法Sedgewick第四版-第1章基础-014一用stack把前置表达式转为后置表达式并计算值的相关文章

算法Sedgewick第四版-第1章基础-001递归

一. 方法可以调用自己(如果你对递归概念感到奇怪,请完成练习 1.1.16 到练习 1.1.22).例如,下面给出了 BinarySearch 的 rank() 方法的另一种实现.我们会经常使用递归,因为递归代码比相应的非递归代码更加简洁优雅.易懂.下面这种实现中的注释就言简意赅地说明了代码的作用.我们可以用数学归纳法证明这段注释所解释的算法的正确性.我们会在 3.1 节中展开这个话题并为二分查找提供一个这样的证明.编写递归代码时最重要的有以下三点.? 递归总有一个最简单的情况——方法的第一条语

算法Sedgewick第四版-第1章基础-008一用数组实现固定长度的栈

1 package algorithms.ADT; 2 3 /****************************************************************************** 4 * Compilation: javac FixedCapacityStackOfStrings.java 5 * Execution: java FixedCapacityStackOfStrings 6 * Dependencies: StdIn.java StdOut.

算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-005计测试算法

1. 1 package algorithms.analysis14; 2 3 import algorithms.util.StdOut; 4 import algorithms.util.StdRandom; 5 6 /****************************************************************************** 7 * Compilation: javac DoublingTest.java 8 * Execution: jav

算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-002插入排序法(Insertion sort)

一.介绍 1.时间和空间复杂度 运行过程 2.特点: (1)对于已排序或接近排好的数据,速度很快 (2)对于部分排好序的输入,速度快 二.代码 1 package algorithms.elementary21; 2 3 /****************************************************************************** 4 * Compilation: javac Insertion.java 5 * Execution: java I

算法Sedgewick第四版-第1章基础-018一解决不能声明泛型数组的两咱方法(强转或反射)

1. 1 /****************************************************************************** 2 * Compilation: javac ResizingArrayStackWithReflection.java 3 * Execution: java ResizingArrayStackWithReflection < input.txt 4 * Dependencies: StdIn.java StdOut.jav

算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-007归并排序(自下而上)

一. 1. 2. 3. 二.代码 1 package algorithms.mergesort22; 2 3 import algorithms.util.StdIn; 4 import algorithms.util.StdOut; 5 6 /****************************************************************************** 7 * Compilation: javac MergeBU.java 8 * Executio

算法Sedgewick第四版-第1章基础-1.3Bags, Queues, and Stacks-001可变在小的

1. package algorithms.stacks13; /****************************************************************************** * Compilation: javac ResizingArrayBag.java * Execution: java ResizingArrayBag * Dependencies: StdIn.java StdOut.java * * Bag implementatio

算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-006归并排序(Mergesort)

一. 1.特点 (1)merge-sort : to sort an array, divide it into two halves, sort the two halves (recursively), and then merge the results. As you will see, one of mergesort’s most attractive properties is that it guarantees to sort any array of N items in t

算法Sedgewick第四版-第1章基础-003一封装交易对象

1. 1 package ADT; 2 3 /****************************************************************************** 4 * Compilation: javac Transaction.java 5 * Execution: java Transaction 6 * Dependencies: StdOut.java 7 * 8 * Data type for commercial transactions.