中缀表达式如何转换为前后缀表达式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中缀表达式如何转换为前后缀表达式?相关的知识,希望对你有一定的参考价值。

刚学编程,对这方面还不能完全理解。

1、中缀表达式变后缀的算法:遇到操作数,直接输出。

2、栈为空是,遇到运算符,直接入栈。

3、遇到左括号时,将其入栈。

4、遇到右括号时,执行出栈操作,并且开始将出栈的元素输出。直到弹出栈的元素是左括号为止。

5、遇到其他运算符的时候,弹出所有优先级大于等于该运算符栈顶元素,然后将该运算符入栈。最终将栈中的元素依次出栈。

参考技术A

1.中缀表达式后缀算法:遇到操作数,直接输出。

2.栈是空的,遇到操作符,直接推栈。

3.当遇到开括号时,按下它,如下图所示。

4.当遇到右括号时,执行out操作并开始输出out元素。直到弹出堆栈的元素是一个开括号。

5.当遇到其他操作符时,弹出该操作符大于或等于堆栈顶部的所有优先级元素,然后将该操作符推入堆栈。最后,将堆栈中的元素推出堆栈。

参考技术B 一个中缀式到其他式子的转换方法~~
这里我给出一个中缀表达式~
a+b*c-(d+e)
第一步:按照运算符的优先级对所有的运算单位加括号~
式子变成拉:((a+(b*c))-(d+e))
第二步:转换前缀与后缀表达式
前缀:把运算符号移动到对应的括号前面
则变成拉:-( +(a *(bc)) +(de))
把括号去掉:-+a*bc+de 前缀式子出现
后缀:把运算符号移动到对应的括号后面
则变成拉:((a(bc)* )+ (de)+ )-
把括号去掉:abc*+de+- 后缀式子出现
参考技术C 中缀转后缀表达式:设计两个栈,一个是字符型的,存放运算符,用以将算数表达式变成无括号的表达式;另一个是浮点型的,存放操作数,用以对无符号的表达式求值。要先假设运算符的优先级:();* /;+ -。
首先将一个左括号‘(’进栈,作为栈底元素;接着从左到右对算数表达式进行扫描,每次读一个字符,若遇到左括号‘(’,则进栈; 若遇到的是操作数,则立即输出; 若又遇到运算符,如果他的优先级比栈顶元素的优先级高的话,则直接进栈,否则输出栈顶元素,直到新的栈顶元素的优先级比他低的时候,将他压栈; 若遇到的是右括号‘)’,则将栈顶的运算符输出,知道栈顶的元素为‘(’,谈后,左右括号互相抵消; 如果最终,我们要扫描的表达式结束,就将栈中的运算符全部输出,消除栈底的左括号‘(’。
我也是刚学,数据结构上用到的,你看看对你有没有帮助吧追问

能举了例子吗?

追答

这个还不好举,不然还得画图啊什么的。其实你就写一个表达式,然后从第一个字符开始从左往右读,遇山开路,遇水架桥。慢慢的就熟了。说来惭愧,我也在一个字符一个字符地读着呢

参考技术D 我可以帮个小忙,树学过吗?把后缀表达式换成中缀我会,把表达式换成树的形式和顺序;树其实很简单,看看就好了,用树比较好理解

C语言后缀表达式转换成中缀表达式

C语言编程,只见过中缀表达式转换成后缀表达式的!
求大神帮忙!!!

参考技术A 在计算机上用的
1、利用栈来实现
2、利用语法树来实现
先把中缀表达式用二叉树表示出来,再后序遍历该二叉树就得到相应的后缀表达式了
在草稿上手工转换
3、加括号法
参考技术B 可以看看http://blog.csdn.net/antineutrino/article/details/6763722

以上是关于中缀表达式如何转换为前后缀表达式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在程序中将中缀表达式转换为后缀表达式

将中缀表达式转换为后缀表达式

算术表达式的前缀,中缀,后缀相互转换

中缀表达式转换为后缀表达式(1042)

中缀表达式转换前\后缀表达式的总结

将中缀表达式转换成后缀表达式