【问题标题】:convert infix to postfix将中缀转换为后缀
【发布时间】:2013-09-22 02:09:21
【问题描述】:

我应该将以下内容转换为后缀形式: (A + B * C) / (D - E * F)

我得到了这个答案:ABC*+DEF*-/

这是正确的吗?如果我使用了错误的后缀形式,那么之后有许多问题都是不正确的。如果我错了,你能告诉我为什么吗?感谢您的帮助。

【问题讨论】:

    标签: postfix-notation infix-notation


    【解决方案1】:

    我知道这是一个旧的提交,但这里是

    这是正确的形式。您可以通过自己遍历后缀并将其转换回中缀来轻松检查它,就像这样,从一个空堆栈开始。

    A是数组的第一个元素,是一个数字,所以压入栈中。 B andC. Therefore your stack is nowA,B,C`也是如此。

    下一个标记是一个运算符(*),它需要两个操作数。因此,从堆栈中弹出顶部的两个操作数,即BC。将两者结合,由运算符分开,并将其压入堆栈。为了简化算法,只需将括号括起来。你的堆栈现在是A,(B*C)

    您的下一个标记是另一个二元运算符 (+)。重复与上述相同的过程,您的堆栈为(A+(B*C))

    对其余部分重复该过程,您将得到一个等效于(A+B*C)/(D-E*F)的表达式

    【讨论】:

      【解决方案2】:

      是的,通过迭代返回是一种检查方法,但您也可以将此表达式从中缀开头转换为后缀。 表达式:-(A+BC)/(D-EF)从表达式中的第一个符号开始。

      symbol                stack(operator)              postfix(operand)
       (                        (
        A                       (                           A 
        +                       (+                          A
        B                       (+                          AB
        *                       (+*                         AB
        C                       (+*                         ABC
        )                       (+*)                        ABC
           as bracket closes every symbol inside bracket popout(LIFO)
                                                            ABC*+
        /                       /                           ABC*+
        (                       /(                          ABC*+
        D                       /(                          ABC*+D
        -                       /(-                         ABC*+D
        E                       /(-                         ABC*+DE
        *                       /(-*                        ABC*+DE
        F                       /(-*                        ABC*+DEF
        )                       /(-*)                       ABC*+DEF
                                  /                         ABC*+DEF*-
         as all symbol have been done operator left in stack will popout(LIFO)
                                                            ABC*+DEF*-/
      

      随着更高优先级的运算符的到来,它可以与已经较低优先级的运算符一起放入堆栈,但在相反的情况下,如果堆栈中的更高优先级运算符和较低优先级的符号出现,则更高优先级的运算符将从堆栈弹出到后缀表达式。注意:- 没有两个相同优先级的运算符可以一起留在堆栈中,因为第二个运算符来第一个相同优先级的运算符会弹出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 1970-01-01
        • 2015-01-18
        • 1970-01-01
        相关资源
        最近更新 更多