前缀、中缀、后缀表达式及树的互相转换及计算

参考:http://www.cnblogs.com/unixfy 

一、中缀表达式转前缀

首先设定一个操作符栈,从右到左顺序扫描整个中缀表达式,如果是操作数,则直接归入前缀表达式;如果是操作符,则检测器是否是右括号,如果是右括号,则直接将其入栈;如果是左括号,则将栈中的操作符依次弹栈,归入前缀表达式,直至遇到右括号,将右括号弹栈,处理结束;如果是其他操作符,则检测栈顶操作符的优先级与当前操作符的优先级关系,如果栈顶操作符优先级大于当前操作符的优先级,则弹栈,并归入前缀表达式,直至栈顶操作符优先级小于等于当前操作符优先级,这时将当前操作符压栈。

         当扫描完毕整个中缀表达式后,检测操作符栈是否为空,如果不为空,则依次将栈中操作符弹栈,归入前缀表达式。最后,将前缀表达式翻转,得到中缀表达式对应的前缀表达式。

二、中缀表达式转后缀 

使用操作符栈;对于操作数直接进入后缀表达式;对于“(”,入栈;对于“)”,弹栈,直至“(”;对于其他操作符,弹栈并进入后缀表达式,直至小于当前操作符优先级或者“(”;扫描中缀表达式后,弹出栈中所有操作符并进入后缀表达式。

总结:

 

中缀转前缀

中缀转后缀

操作符栈

操作符栈

扫描顺序

从右到左

从左到右

遇到操作数

直接归入

直接归入

遇到右括号

直接入栈

将栈中操作符依次弹栈,归入,直至遇到左括号,将左括号弹栈,处理完毕

遇到左括号

将栈中操作符依次弹栈,归入,直至遇到右括号,将右括号弹栈,处理完毕

直接入栈

遇到其他操作符

检测栈顶操作符优先级与当前操作符优先级关系,如果栈顶大于当前,则出栈,归入,直至栈顶小于等于当前,并将当前操作符入栈

检测栈顶与当前优先级关系,如果栈顶大于等于当前则出栈,归入,直至栈顶小于当前,并将当前操作符入栈

操作符栈中的优先级

从栈底到栈顶操作优先级:非递减。即:栈顶可以大于或等于下面的

从栈底到栈顶优先级:递增。即:栈顶必须大于下面的

是否翻转

翻转

无需翻转

三、前缀表达式转中缀表达式

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值