栈---表达式的转换规则及其求值方法

总结一下利用栈实现前缀、中缀、后缀表达式之间的转换规则。

1.中缀转后缀

 先画个栈存放操作符,再从左到右扫描中缀表达式,如果遇到操作数,直接把它从左往右写出来,如果遇到操作符,就把它入栈,但在入栈前先做一样工作,就是把它和栈顶运算符做比较,如果它的优先级小于或等于栈顶运算符,则栈顶运算符出栈,并写到当前结果的运算表达式的右边。若大于,则入栈。若栈空,直接入栈。遇到括号的情况,若遇到左括号,直接入栈。当栈顶元素是左括号的时候,所有扫描到的运算符都入栈。当扫描到右括号的时候,则执行一系列的出栈操作,把栈中所有的在左括号之前的元素全部出栈并加入表达式中,括号直接扔掉。当扫描完所有字符时,若栈中还有运算符,则全部出栈并加入表达式中。

2.中缀转前缀 

 和中缀转后缀的过程相似,但有所不同的是,从右往左扫描,遇到右括号则右括号入栈,遇到左括号时则把栈中左括号之前的运算符全部出栈。表达式写的时候是从右往左写出来。当扫描到的运算符优先级小于栈顶运算符时,栈顶运算符出栈,当前运算符入栈。

3.后缀转前缀

 这个的转化跟前面两个不一样,还有,无论是后缀表达式还是前缀表达式中都没含有括号,所以不需要处理括号。做法是从左到右扫描,当遇到运算数时,将该运算数入栈,当遇到运算符时,对栈做两次弹出操作,然后依次写出“操作符  第二弹出元素  栈顶元素”,然后将这个整体式子压入栈中,再次重复操作。

4.中缀表达式求值 

要设置两个栈,一个存操作数,一个存运算符,从左向右扫描,当扫描到操作数时,将操作数压入栈,当扫描到运算符时,先比较栈顶运算符和当前运算符的优先级,若栈顶运算符优先级小于当前运算符,则将运算符入栈,否则将栈顶运算符弹出,并弹出操作数栈的两个元素,进行运算后重新压入操作数栈。当遇到左括号时,将其压入栈,直到遇到右括号时,陆续将栈中在左括号之前的所有运算符出栈运算。

5.后缀表达式求值

 只需要设置一个栈,从左往右扫描,当遇到操作数时,将其压入栈中,当遇到运算符时,弹出栈中两个元素,进行运算,并将运算结果重新压入栈中,重复这些操作过程即可!

6.前缀表达式求值

前缀表达式的求值与后缀表达式的求值类似,不过前缀表达式是从右往左开始扫描。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值