我正在讨论中缀、前缀和后缀的转换,我对以下表达式有疑问:
中缀:a b*d-i
下面的转换是我脑海中的转换。但是,下面的前缀表达式与联机转换工具不匹配
前缀:-a*bdi
后缀:abd*i-
当我在一些在线转换器中,甚至在我写的代码中放入上述infix时,我得到:
infix:a b*d-i
前缀:a-*bdi
Postfix:abd*i-
所以,我在这里的问题是,如果我们要计算上面的前缀,那么我们将在加法之前做减法,这在我看来是不正确的,因为根据运算符的关联性加法应该首先计算。这怎么正确?
您指向此处的联机转换器使用了错误的过程将中缀转换为前缀:https://www.web4college.com/converters/infix-to-postfix-prefix.php
它说(这是错误的,所以没有人复制它!):
这篇文章的作者很困惑,因为:
但是反转中缀表达式不会反转其表达式树,因为它具有左或右关联性。因此,给定的过程会产生错误的答案。
a-b-c TREE REVERSED TREE c-b-a TREE
- - -
/ \ / \ / \
- c c - - a
/ \ / \ / \
a b b a c b
使用的到算法: 输入: 预期输出: 实际输出: 如果当前运算符和堆栈顶部的运算符具有优先级,则检查它们的相关性, null null 然而,我的代码不适合于关联。有人能解释一下在上面的实现中如何处理关联性吗?
使用表达式 例5.1 使用表达式 #!/usr/bin/python # Filename: expression.py length =5 breadth =2 area = length * breadth print'Area is', area print'Perimeter is', 2* (length + breadth) (源文件:code/expression.py) 输出 $
我们将简单浏览一下运算符和它们的用法: 技巧 你可以交互地使用解释器来计算例子中给出的表达式。例如,为了测试表达式2 + 3,使用交互式的带提示符的Python解释器: >>> 2 + 3 5 >>> 3 * 5 15 >>> 表5.1 运算符与它们的用法 运算符 名称 说明 例子 + 加 两个对象相加 3 + 5得到8。'a' + 'b'得到'ab'。 - 减 得到负数或是一个数减去另一个数 -
当你编写一个算术表达式如 B*C 时,表达式的形式使你能够正确理解它。在这种情况下,你知道 B 乘以 C, 因为乘法运算符 * 出现在表达式中。这种类型的符号称为中缀,因为运算符在它处理的两个操作数之间。看另外一个中缀示例,A+B*C,运算符 + 和 * 仍然出现在操作数之间。这里面有个问题是,他们分别作用于哪个运算数上,+ 作用于 A 和 B , 还是 * 作用于 B 和 C?表达式似乎有点模糊
在Java中
本文向大家介绍中缀表达式转后缀表达式相关面试题,主要包含被问及中缀表达式转后缀表达式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 对于中缀表达式,遇到操作数直接将其输出,如果遇到操作符和左括号全部压入栈中,若遇到右括号则将栈中元素全部弹出,直到遇到左括号为止。压栈过程中,若遇到其它操作符,从栈中弹出元素直到遇到更低优先级的操作符为止。