我无法解决从postfix到infix的这个表达式。请帮我详细了解
5 x y - / x y + 3 ^ 7 / +
答案 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)
这是相当直接的:
为了在C ++中处理这个问题,我创建了一个基类(Expression
),其派生类代表不同类型的节点(Value
,Variable
和BinaryOperation
)并保持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 这就是转换在计算机科学中有用的原因。