数据结构-栈-中缀、后缀、前缀相互转换

中缀:正常表达式

后缀:逆波兰式

         1、中存符号

         2、字母、数字直接打印

         3、先进栈,再比较优先级,只有当比栈中前一个符号优先级高的情况下才走下去,否则弹出前一个符号,直至前一个符号的优先级小于这个符号,也即是连续弹栈。

         4、打印的时候遇到括号不计在内,但是在栈中括号是被存储过的,当遇到)时,按照“先进后出”的原则弹出()里的全部符号

         5、最终,弹出栈中全部符号

前缀:波兰式

         (1) 首先构造一个运算符栈(也可放置括号),运算符(以括号为分界点)在栈内遵循越往栈顶优先级不降低的原则进行排列。

         (2)从右至左扫描中缀表达式,从右边第一个字符开始判断:

                  如果当前字符是数字,则分析到数字串的结尾并将数字串直接输出。

                  如果是运算符,则比较优先级。如果当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈), 则将运算符直接入栈;否则将栈顶运算符出栈并输出,直到当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),再将当前运算符入栈。

                  如果是括号,则根据括号的方向进行处理。如果是向右的括号,则直接入栈;否则,遇向左的括号前将所有的运算符全部出栈并输出,遇右括号后将向左、向右的两括号一起出栈(并不输出)。

         (3) 重复上述操作(2)直至扫描结束,将栈内剩余运算符全部出栈并输出,再逆缀输出字符串。中缀表达式也就转换为前缀表达式了。

例子:

                  a+b ---> +,a,b

                  a+(b-c) ---> +,a,-,b,c

                  a+(b-c)*d ---> +,a,*,-,b,c,d

                  a+1+3 ---> +,+,a,1,3

总结起来就是:后缀是从左往右,前缀是从右往左

常见考题形式:

1、前缀表达式转为中缀表达式即前缀表达式的计算机求值:
     从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈      顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。
     例如前缀表达式“- × + 3 4 5 6”:
     (1) 从右至左扫描,将6、5、4、3压入堆栈;
     (2) 遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈;
     (3) 接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈;
     (4) 最后是-运算符,计算出35-6的值,即29,由此得出最终结果。

2、后缀表达式转为中缀表达式即后缀表达式的计算机求值:
 
   与前缀表达式类似,只是顺序是从左至右
     从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
     例如后缀表达式“3 4 + 5 × 6 -”:
     (1) 从左至右扫描,将3和4压入堆栈;
     (2) 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;
     (3) 将5入栈;
     (4) 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;
     (5) 将6入栈;
     (6) 最后是-运算符,计算出35-6的值,即29,由此得出最终结果。


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值