最近,我浏览了一些网站,将中缀转换成前缀符号,最后我被卷了起来。
我已经给出了我所做的步骤。。
例:-(1(2*3))(5*6)(7/8)
方法1:-(无需任何算法的手动转换):-
Step1: (1+(*23)) + (*56) + (/78)
Step2: (+1*23) + (*56) + (/78)
Step3: +(+1*23)(*56) + (/78)
Step4: +[+(+1*23)(*56)](/78)
Step5: +++1*23*56/78 **--- Final Ans -----**
方法2:-
根据现场情况http://scanftree.com/Data_Structure/infix-to-prefix
Step1: Reverse it:- ) 8 / 7 ( + ) 6 * 5 ( + ) ) 3 * 2 ( + 1 ( Step2: Replace the '(' by ')' and vice versa: ( 8 / 7 ) + ( 6 * 5 ) + ( ( 3 * 2 ) + 1 ) Step3: Convert the expression to postfix form:- 8 7 / 6 5 * + 3 2 * 1 + + Step4: Reverse it + + 1 * 2 3 + * 5 6 / 7 8 --- Final Ans -----
所以,在这里我完全被绞死了。
请任何人提供以下方面的信息:-
所以我可以更好地理解这个概念。
手动转换是正确的,因为当我们反转中缀表达式以计算前缀时,表达式的关联性从左到右到右到左变化,这在算法中没有考虑,并且经常被忽略。
示例:表达式:5-3-2:内缀到前缀(手动转换)(-5 3)-2 -(- 5 3) 2 - - 5 3 2
现在由算法(如果关联性没有改变)反向表达式:2-3-5
后缀: 2 3-5-
再次反向获得前缀:-5-3 2
现在看看,如果我们忽略了关联性,它会产生巨大的差异
现在,如果我们改变从左到右到右到左的联想:
然后:
反向表达式: 2-3-5
后缀:2 3 5---(像a^b^b到后缀:abc^^^,因为它也是右关联的)
反向--5 3 2
(b*b-4*a*c)/(2*c)方程——1<现在我将通过替换不同的变量,一次做两个项,从数学上解决这个问题
=
xi-2c*/
bb*yc*-2c*/
bb*4a*c*-2a*/
你的方法不正确,看看注释,它说(a b)c=a(b c)
。(a b)*c呢?(a b)*c!=a(b*c)
。根据你的手动算法,你把最后一个放在前面。这是不正确的。如果你用
*
而不是last,你把它放在哪里了?只要考虑到这一点,你就可以很容易地发现你的算法的问题。解决这个问题的另一个算法是在继续之前插入它。将每个左括号替换为其中的运算符。例如,
((1 (2*3)) ((5*6) (7/8)))
然后变成1*23 *56 /78
。如果内部运算符的优先级相同,则算法是正确的。如果不是,它就会失败。
注意:你的答案也可以通过括号的排列得到。(((1 (2*3)) (5*6)) (7/8))
然后变成1*23*56/78
。但是如果最后一个是*
而不是,那么它就不起作用了。
本文向大家介绍将中缀转换为前缀表达式,包括了将中缀转换为前缀表达式的使用技巧和注意事项,需要的朋友参考一下 要通过计算机求解表达式,我们可以将其转换为后缀形式或前缀形式。在这里,我们将看到中缀表达式如何转换为前缀形式。 首先,中缀表达式反转。注意,对于反转,圆括号也将反转。 例如:表达式:A + B *(C-D) 反转后的表达式为:)D – C(* B + A 因此我们需要将左括号转换为右括号,反
我应该将以下内容转换为后缀形式: 我得到了这个答案: 这是正确的吗?如果我使用了错误的后缀形式,那么之后还有很多问题都是不正确的。如果我错了,你能告诉我为什么吗?谢谢你的帮助。
本文向大家介绍将中缀转换为后缀表达式,包括了将中缀转换为后缀表达式的使用技巧和注意事项,需要的朋友参考一下 前缀表达式是人类可读和可解的。我们可以轻松地区分算子的顺序,也可以在计算数学表达式时先使用括号将其求解。计算机无法轻松地区分运算符和括号,这就是为什么需要后缀转换的原因。 要将中缀表达式转换为后缀表达式,我们将使用堆栈数据结构。通过从左到右扫描infix表达式,当我们得到任何操作数时,只需将
问题描述 (Problem Description) 如何将中缀表达式转换为后缀表达式? 解决方案 (Solution) 下面的示例演示如何使用stack的概念将中缀转换为后缀表达式。 import java.io.IOException; public class InToPost { private Stack theStack; private String input;
我目前正在进行一个项目,使用单链表形式的堆栈将后缀转换为内缀。我已经设法将表达式,如转换为,但是当表达式变得更长时,如。它不工作。我正在考虑将之前转换的表达式推回到堆栈上,但是堆栈的类型是char,表达式是一个字符串,当我试图将其推回时,它会抱怨。我应该把它作为一个模板吗?如果是的话,我该怎么做?或者还有别的方法来解决这个问题吗? 这是我的密码:
正如标题中所说,我正在尝试创建一个代码,将后缀符号转换为表达式树。您可以在此处检查构造函数: 这是我的代码: 我用charAt()方法逐个检查每个字符。只需1-将每个操作数推入堆栈2-当遇到运算符时,从堆栈中弹出两个操作数,并将其分配给运算符的左右两侧,然后将新节点推入堆栈。3-最后我将根推到堆栈中,然后返回它。 当我尝试运行时,不会发生错误,但它也没有以正确的方式工作。我检查了很多次代码,但我无