Algorithm 难以理解如何处理调车场算法的输出
我一直在看维基页面: 我已经使用代码示例构建了第一部分,基本上我现在可以:Algorithm 难以理解如何处理调车场算法的输出,algorithm,shunting-yard,postfix-notation,Algorithm,Shunting Yard,Postfix Notation,我一直在看维基页面: 我已经使用代码示例构建了第一部分,基本上我现在可以: 3+4*2/(1-5)^2^3转换为3 4*1 5− 2 3^/+ 但是我不知道如何使用342*15− 2 3^/+获取3.00012207 维基上的示例代码和解释对我来说毫无意义 有人能解释一下如何评估3 4 2*1 5吗− 2 3^^/+并给出答案。提前谢谢。我不需要代码示例,只需要一个很好的解释或示例的分解 这并不重要,但我正在使用.NETC 后修复表示法是在HP计算器中计算的方法 保留一个堆栈,当你得到一个数字时
3+4*2/(1-5)^2^3
转换为3 4*1 5− 2 3^/+
但是我不知道如何使用342*15− 2 3^/+
获取3.00012207
维基上的示例代码和解释对我来说毫无意义
有人能解释一下如何评估3 4 2*1 5吗− 2 3^^/+
并给出答案。提前谢谢。我不需要代码示例,只需要一个很好的解释或示例的分解
这并不重要,但我正在使用.NETC 后修复表示法是在HP计算器中计算的方法 保留一个堆栈,当你得到一个数字时,将其添加到顶部。每当您得到一个操作符时,使用来自顶部的输入,然后将结果添加到顶部
token stack
*empty*
3 3 //push numbers...
4 3 4
2 3 4 2
* 3 8 //remove 4 and 2, add 4*2=8
1 3 8 1
5 3 8 1 5
- 3 8 -4
2 3 8 -4 2
3 3 8 -4 2 3
^ 3 8 -4 8
... ...
调车场算法的目的是其输出为,这很容易评估:
- 创建一个堆栈来保存值
- 虽然还剩下反向波兰符号输入:
- 读一项输入
- 如果它是一个值,则将其推送到堆栈上
- 否则,这是一个操作;从堆栈中弹出值,对这些值执行操作,然后返回结果
- 当没有输入时,如果表达式格式正确,堆栈上应该只有一个值;这是评估结果
3 4 2*1 5− 2 3^^/+
从左到右,如下所示:
当您到达终点时,堆栈应该有一个元素,这将是结果。我知道我参加聚会有点晚了 我看到了这个问题,开始为Rosetta代码编写两个任务。碰巧那可能就是你想要的。它给出了一个注释表,说明了在逐个标记地计算RPN表达式的值时发生的情况 以下是其输出的示例:
For RPN expression: '3 4 2 * 1 5 - 2 3 ^ ^ / +'
TOKEN ACTION STACK
3 Push num onto top of stack 3
4 Push num onto top of stack 3 4
2 Push num onto top of stack 3 4 2
* Apply op to top of stack 3 8
1 Push num onto top of stack 3 8 1
5 Push num onto top of stack 3 8 1 5
- Apply op to top of stack 3 8 -4
2 Push num onto top of stack 3 8 -4 2
3 Push num onto top of stack 3 8 -4 2 3
^ Apply op to top of stack 3 8 -4 8
^ Apply op to top of stack 3 8 65536
/ Apply op to top of stack 3 0.0001220703125
+ Apply op to top of stack 3.0001220703125
The final output value is: '3.0001220703125'
堆栈是实现这一点的适当数据结构,您建议在Java中使用哪种类型的集合(如果您知道的话)?是LinkedList还是Deque?我知道Java有一个堆栈类,但我读到由于同步的原因,不建议使用它。