-->

后缀以缀对话[关闭](Postfix to Infix conversation [closed])

2019-08-01 12:01发布

我解决不了这个表情从后缀到中缀。 请帮我详细地了解

5 x y - / x y + 3 ^ 7 / +

Answer 1:

后缀以缀:

5 x y - / x y + 3 ^ 7 / +

5 XY - /
A)5xy- / = 5(XY)/ =(5 /(XY))
XY +
B)XY + =(X + Y)
(X + Y)3 ^
B.1)(X + Y)3 ^ =((X + Y)^ 3)
现在,(5 /(XY))((X + Y)^ 3)7 / +
=(5 /(XY))(((X + Y)^ 3)/ 7)+ =(5 /(XY))+(((X + Y)^ 3)/ 7)

POSTFIX和PREFIX是表达在其中使用没有括号。 运营商的优先顺序决定在那里表达出现的顺序,所以要计算表达式无需搜索下一个操作FAST perform-。

而在操作人员的缀表达式优先由括号覆盖。 因此括号内是有在中缀expression-需要搜索以执行例如A + B%d哪个操作-因此SLOW。
这就是原因所在转换是在计算机科学中非常有用。



Answer 2:

这不是代码,但方式,你应该扩展后缀,以中缀::

5× - / X + 3 + 7 / +

5(XY)/ XY + 3 ^ 7 / +

(5 /(XY))+ XY 3 ^ 7 / +

(5 /(XY))(X + Y)3 ^ 7 / +

(5 /(XY))((X + Y)^ 3)7 / +

(5 /(XY))(((X + Y)^ 3)/ 7)+

(5 /(XY))+(((X + Y)^ 3)/ 7)



Answer 3:

这是相当直截了当:

  1. 你读的论点,并决定如果它是一个值或一个变量。 如果是,你推堆栈上的争论。 如果不是它是一个运营商。
  2. 如果你有一个运营商,创建由操作员为根,堆作为其子的许多参数的树。 你推树在堆栈中。
  3. 当您想要打印的中间符号你做的堆栈的顶部的有序行走(原定位后的符号仅仅是同一棵树的后序的步行路程)。

为了解决这个在C ++我创建一个基类( Expression )与代表不同类型的节点的派生类( ValueVariable ,和BinaryOperation )并保持std::stack<std::shared_ptr<Expression>> 。 编码这一点主要是打字练习。



文章来源: Postfix to Infix conversation [closed]