首页 > 试题广场 >

中缀表达式X=A+B*(C-(D+F))E转后缀表达式之后

[单选题]
中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么?
  • ABCDF+-*E/+
  • ABDF+C-*E/+
  • ABDF+C*-E/+
  • ABDF+C*-E+/
三步求后缀(前缀)表达式:
(1)将 A+B*(C-(D+F))/E 按优先级加括号 ( A+((B*(C-(D+F))/E)))
(2)从最内层括号将符号提到括号后(前缀提到括号前) (A((B(C(DF)+)-)*E)/)+
(3)去掉括号的即所得 ABCDF+-*E/+
发表于 2015-10-08 15:34:54 回复(6)
A+B*(C-(D+F))/E
1,读到A,直接输出A
2,读到+,放入栈中
3,读到B,直接输出,此时栈中有+ ,输出AB
4,读到*,因为*的优先级高于+,入栈,栈中有+ *(右边为栈顶)
5,读到(,优先级最高,遇到)才出,入栈,栈中有+ * (
6,读到C,输出ABC
7,读到-,入栈,栈中有+ *  ( —
8,读到(,入栈,栈中有+  *  (  —(
9,读到D,输出ABCD
10,读到+,入栈,栈中有+  *  (  —( +
11,读到F,输出ABCDF
12,读到),出栈+,输出ABCDF+,栈中有+  *  ( —
13,读到),出栈—。输出ABCDF+-,栈中有+  *
14,读到/,出栈*,入栈/,输出ABCDF+-*,栈中有+ /
15,读到E,输出ABCDF+-*E
15,出栈/,输出ABCDF+-*E/
16,出栈+,输出ABCDF+-*E/+
所以后缀表达式为ABCDF+-*E/+
发表于 2015-09-29 23:06:43 回复(2)
xpj头像 xpj
中缀表达式转后缀表达式的方法:
1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
6.最终将栈中的元素依次出栈,输出。

发表于 2015-09-19 20:01:42 回复(1)
                +
            /        \
        A            "/"
                    /        \
                  *           E
              /      \
            B        -
                   /     \
                C        +
                        /    \
                     D       F
 
二叉树见图
发表于 2015-09-15 19:13:38 回复(4)
利用二叉树来解答,根据中序画出二叉树如图,其中叶子节点为值,非叶子节点为运算符:
前序遍历即可得出前缀表达式,后序遍历即可得出后缀表达式。
发表于 2017-11-06 14:46:37 回复(0)
答案为ABCDF+-*E/+
前面回答已经很好了,另外还有一种添加括号的方法。http://blog.csdn.net/sgbfblog/article/details/8001651
编辑于 2015-10-26 10:48:31 回复(0)
加括号解决,做一遍感受一下
发表于 2017-08-28 12:46:55 回复(0)
运算符进栈前先和当前的栈顶的运算符进行比较,如果栈顶的运算符优先级不小于当前要进栈的运算符,就弹出。

发表于 2017-03-23 15:58:47 回复(0)
利用树结构来解题。
先把计算式子转化成一个二叉树,叶子节点写数字,分支节点写运算符。如下:

要求后缀表达式,直接写出后根遍历的序列即刻,同理可以写出先缀表达式。
发表于 2017-01-09 13:51:45 回复(0)
http://www.jianshu.com/p/753f8cf44f89
超级简单的方法
发表于 2016-03-02 09:10:09 回复(1)
前缀表达式: 从右至左,入栈,遇到运算符,弹出,一个弹出的为左侧运算对象
后缀表达式:从左至右,入队列, 同上
发表于 2015-09-15 15:51:21 回复(0)