算术表达式a+b*(c+d/e )转为后缀表达式是?具体分析下!谢谢!!

如题所述

转化后的后缀表达式为:abcde/+*+

具体分析:

1、初始化一空栈,用来对符号进出栈使用。

2、第一个字符是a,输出,后面是符号“+”,进栈。输出的为a。

3、第三个字符是b,输出,后面是符号“*”,进栈。输出的为ab。

4、 第五个字符是“(”,依然是符号,因其只是左括号,还未配对,故进栈。输出的为ab。

5、第六个字符是c,输出,后面是符号“+”,进栈。输出的为abc。

6、第八个字符是d,输出,后面是符号“/”,进栈。输出的为abcd。

7、后面是字符e,输出,之后是“)”配对完成。进栈输出的为abcde。

8、栈顶元素“(”出栈,“/”出栈,“+”出栈,“(”出栈,括号配对完成。

9、之后也是依次出栈,最后结果为:abcde/+*+。

扩展资料:

后缀表达式进行计算的通用做法:

可以先建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。

后缀表达式:也叫逆波兰表示法(Reverse Polish notation,RPN,或逆波兰记法),是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级

实际意义:

1、当有操作符时就计算,因此,表达式并不是从右至左整体计算而是每次由中心向外计算一部分,这样在复杂运算中就很少导致操作符错误。

2、堆栈自动记录中间结果,这就是为什么逆波兰计算器能容易对任意复杂的表达式求值。与普通科学计算器不同,它对表达式的复杂性没有限制。

3、逆波兰表达式中不需要括号,用户只需按照表达式顺序求值,让堆栈自动记录中间结果;同样的,也不需要指定操作符的优先级。

4、逆波兰计算器中,没有“等号”键用于开始计算。

5、逆波兰计算器需要“确认”键用于区分两个相邻的操作数。

6、机器状态永远是一个堆栈状态,堆栈里是需要运算的操作数,栈内不会有操作符。

7、教育意义上,逆波兰计算器的使用者必须懂得要计算的表达式的含义。

参考资料来源:百度百科-后缀表达式

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-08

转为后缀表达式是abcde/+*+ 

a+b*(c+d/e)   (a+(b*(c+(d/e))))

按照运算符的优先级对所有的运算单位加括号,式子变成了:(a+(b*(c+(d/e)))),然后转换后缀表达式。

后缀:把运算符号移动到对应的括号后面,则变成了:(a(b(c(de)/)+)*)+

把括号去掉后的式子则为后缀表达式: abcde/+*+ 

扩展资料:

将中缀表达式转换为后缀表达式的算法思想:

1、开始扫描;

2、数字时,加入后缀表达式;

3、运算符:

a、若为 '(',入栈;

b、 若为 ')',则依次把栈中的运算符加入后缀表达式中,直到出现'(',从栈中删除'(' ;

c.、若为 除括号外的其他运算符, 当其优先级高于除'('以外的栈顶运算符时,直接入栈。否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止,然后将其自身压入栈中(先出后入)。

4、当扫描的中缀表达式结束时,栈中的的所有运算符出栈;

参考资料:

本回答被网友采纳
第2个回答  2020-01-02

转为是“abcde/+*+ ”。

a+b*(c+d/e)   (a+(b*(c+(d/e))))

通过根据的优先级将所有算术单元括起来,该表达式变为:(a+(b*(c+(d/e)))),然后转换后缀表达式。

后缀:将操作符号移到相应的括号之后,然后变为:(a(b(c(de)/)+)*)+

除去括号后的表达式是后缀表达式:abcde/+*+

扩展资料:

后缀表达式进行计算的通用做法:

可以先建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。

后缀表达式:也叫逆表示法(Reverse Polish notation,RPN,或逆波兰记法),是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。

参考资料来源:

本回答被网友采纳
第3个回答  推荐于2017-11-24
a+b*(c+d/e)
(a+(b*(c+(d/e)))) 按计算顺序加上括号
(a(b(c(de)/)+)*)+ 把运算符放到括号外面
abcde/+*+ 去掉括号本回答被网友采纳
第4个回答  2015-05-19
abcde/+*+
脑算,没用编程实现!
后缀表达式是从左到右算。
我给你说说我的技巧吧,也许你就学会了。
1。先写好顺序 abcde
2。然后按运算顺序符号 abcde/ abcde/+ abcde/+* abcde/+*+
OK解决。
心得技巧:这是按符号算,从第一个符号的左边俩个数开始算。每个符号都是算符号左边的两个数!
sorry.本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网