中缀表达式如何转换为前后缀表达式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中缀表达式如何转换为前后缀表达式?相关的知识,希望对你有一定的参考价值。
刚学编程,对这方面还不能完全理解。
1、中缀表达式变后缀的算法:遇到操作数,直接输出。
2、栈为空是,遇到运算符,直接入栈。
3、遇到左括号时,将其入栈。
4、遇到右括号时,执行出栈操作,并且开始将出栈的元素输出。直到弹出栈的元素是左括号为止。
5、遇到其他运算符的时候,弹出所有优先级大于等于该运算符栈顶元素,然后将该运算符入栈。最终将栈中的元素依次出栈。
参考技术A1.中缀表达式后缀算法:遇到操作数,直接输出。
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语言编程,只见过中缀表达式转换成后缀表达式的!
求大神帮忙!!!
1、利用栈来实现
2、利用语法树来实现
先把中缀表达式用二叉树表示出来,再后序遍历该二叉树就得到相应的后缀表达式了
在草稿上手工转换
3、加括号法 参考技术B 可以看看http://blog.csdn.net/antineutrino/article/details/6763722
以上是关于中缀表达式如何转换为前后缀表达式?的主要内容,如果未能解决你的问题,请参考以下文章