Postfix to Infix对话

时间:2012-10-16 06:08:22

标签: c++ c equation infix-notation postfix-notation

我无法解决从postfix到infix的这个表达式。请帮我详细了解

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

3 个答案:

答案 0 :(得分:2)

这不是代码,但是你应该将后缀扩展为infix ::

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

5(x-y)/ xy + 3 ^ 7 / +

(5 /(x-y))xy + 3 ^ 7 / +

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

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

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

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

答案 1 :(得分:1)

这是相当直接的:

  1. 您读取参数并确定它是值还是变量。如果是,则在堆栈上推送参数。如果不是,那就是运营商。
  2. 如果您有一个运算符,则创建一个树,该树由运算符作为根,并且堆栈的子参数与其子项一样多。你把树推到了堆栈上。
  3. 如果要打印中缀表示法,请执行堆栈顶部的有序遍历(原始的修复后表示法只是同一棵树的后序步行)。
  4. 为了在C ++中处理这个问题,我创建了一个基类(Expression),其派生类代表不同类型的节点(ValueVariableBinaryOperation)并保持std::stack<std::shared_ptr<Expression>>。解决这个问题主要是打字练习。

答案 2 :(得分:0)

后缀为中缀:

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

步骤

5 x y - /
   A)5xy- / = 5(x-y)/ =(5 /(x-y))
   x y +
   B)x y + =(x + y)
      (x + y)3 ^
      B.1)(x + y)3 ^ =((x + y)^ 3)
  现在,(5 /(x-y))((x + y)^ 3)7 / +
    =(5 /(x-y))(((x + y)^ 3)/ 7)+     =(5 /(x-y))+(((x + y)^ 3)/ 7)

POSTFIX和PREFIX是不使用括号的表达式。运算符的优先级按表达式中的出现顺序决定,因此要评估表达式无需搜索下一个操作来执行 - FAST

在INFIX表达式中,运算符的优先级被括号覆盖。因此括号中有表达式 - 需要搜索要执行的操作,例如A + B%D - 因此 SLOW 这就是转换在计算机科学中有用的原因。