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有一个堆栈类,但我读到由于同步的原因,不建议使用它。