当前位置: 首页 > 知识库问答 >
问题:

将内缀转换为后缀

陈飞
2023-03-14

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

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

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

共有2个答案

齐才艺
2023-03-14

是的,通过迭代返回是一种方法来检查这一点,但您也可以将此表达式从从内缀开始转换为postfix。表达式:-(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*-/

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

韦智刚
2023-03-14

我知道这是个陈词滥调,但这是事实

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

A是数组中的第一个元素,它是一个数字,因此将它推到堆栈上。这同样适用于B和C。因此,堆栈现在是A、B、C`。

下一个令牌是一个运算符(*),它需要两个操作数。因此,从堆栈中弹出前两个操作数,或BC。将两者合并,由操作员分隔,并将其推到堆栈上。为了简化算法,只需在所有内容周围加上括号。您的堆栈现在是A,(B*C)

下一个令牌是另一个二进制运算符()。重复与上面相同的过程,得到的堆栈为(A(B*C))

对其余部分重复此过程,您将得到一个等价于(ab*C)/(D-E*F)

 类似资料:
  • 本文向大家介绍将中缀转换为后缀表达式,包括了将中缀转换为后缀表达式的使用技巧和注意事项,需要的朋友参考一下 前缀表达式是人类可读和可解的。我们可以轻松地区分算子的顺序,也可以在计算数学表达式时先使用括号将其求解。计算机无法轻松地区分运算符和括号,这就是为什么需要后缀转换的原因。 要将中缀表达式转换为后缀表达式,我们将使用堆栈数据结构。通过从左到右扫描infix表达式,当我们得到任何操作数时,只需将

  • 正如标题中所说,我正在尝试创建一个代码,将后缀符号转换为表达式树。您可以在此处检查构造函数: 这是我的代码: 我用charAt()方法逐个检查每个字符。只需1-将每个操作数推入堆栈2-当遇到运算符时,从堆栈中弹出两个操作数,并将其分配给运算符的左右两侧,然后将新节点推入堆栈。3-最后我将根推到堆栈中,然后返回它。 当我尝试运行时,不会发生错误,但它也没有以正确的方式工作。我检查了很多次代码,但我无

  • 最近,我浏览了一些网站,将中缀转换成前缀符号,最后我被卷了起来。 我已经给出了我所做的步骤。。 例:-(1(2*3))(5*6)(7/8) 方法1:-(无需任何算法的手动转换):- 方法2:- 根据现场情况http://scanftree.com/Data_Structure/infix-to-prefix 所以,在这里我完全被绞死了。 请任何人提供以下方面的信息:- 关于我在以上2种方法中哪里出

  • 我试图将给定的数字或代数表达式从内缀符号转换为后缀符号。我希望能够对多位数和负数的数字也这样做。我没有使用指数,如2^3=8。 我使用了一个有点困难的输入表达式,并且我能够成功地将其解析为负数和由多个数字组成的数字。然后,我将这个最终表达式放入ListBuffer中。我创建了一个堆栈类,并定义了我需要的几个方法。我唯一的问题(可能不是唯一的问题)是当我遇到“我不相信我正确地使用了pop和peek”

  • 我没有得到正确的输出为这个程序得到abcde-*给输入在主 这个程序是将表达式从中缀转换为后缀这里是算法 算法1。从左到右扫描中缀表达式。 如果扫描的字符是操作数,则将其输出。 否则, ......3.1如果扫描的运算符的优先级大于堆栈中运算符的优先级(或者堆栈是空的),则推送它。...... 3.2否则,从堆栈中弹出操作符,直到被扫描操作符的优先级小于-等于位于堆栈顶部的操作符的优先级。将扫描的

  • 本文向大家介绍将中缀转换为前缀表达式,包括了将中缀转换为前缀表达式的使用技巧和注意事项,需要的朋友参考一下 要通过计算机求解表达式,我们可以将其转换为后缀形式或前缀形式。在这里,我们将看到中缀表达式如何转换为前缀形式。 首先,中缀表达式反转。注意,对于反转,圆括号也将反转。 例如:表达式:A + B *(C-D) 反转后的表达式为:)D – C(* B + A 因此我们需要将左括号转换为右括号,反