中缀表达式与后缀表达式


  中缀表达式转后缀表达式的步骤为:
  1.新建一个Stack栈,用来存放运算符
  2.新建一个post栈,用来存放最后的后缀表达式
  3.从左到右扫描中缀表达式:
    (1)若读到的是操作数,直接存入post队列,

    (2)若读到的是(,则直接存入stack栈
    (3)若读到的是),则将stack栈中( 前的所有运算符出栈,存入post栈,并把(也出栈
    (4)若读到的是其它运算符,则将该运算符和stack栈顶运算符作比较:若高于栈顶运算符,则直接存入stack栈,否则将栈顶运算符(所有优先级高于或等于读到的运算符的,不包括括号)出栈,存入post栈。最后将读到的运算符入栈。
  4.当扫描完后,stack栈中还在运算符时,则将所有的运算符出栈,存入post栈
    以10+(18+9*3)/15-6 为例

                               POST                           STACK

           1            10

           2            10                              + 

           3            10                              +(

           4            10 18                           +(+    

           5            10 18 9                         +(+

           6            10 18 9                         +(+ *

           7            10 18 9 3 * +                     +

           8            10 18 9 3 * +                     + /

           9            10 18 9 3 * + 15                  + /

           10           10 18 9 3 * + 15 /                -

           11           10 18 9 3 * + 15 / + 6              

           12           10 18 9 3 * + 15 / + 6 -           

  计算后缀表达式的值的步骤为:
  1.初始化一个空堆栈
  2.从左到右读入后缀表达式
  3.如果字符是一个操作数,把它压入堆栈。
  4.如果字符是个操作符,弹出两个操作数,执行恰当操作,然后把结果压入堆栈。如果您不能够弹出两个操作数,后缀表达式的语法就不正确。
  5.到后缀表达式末尾,从堆栈中弹出结果。若后缀表达式格式正确,那么堆栈应该为空。

    以上面得出的后缀表达式为例 10 18 9 3  * + 15 / +  6 -

 

                                POST                                Help

                 1           10 18 9  3 * + 15 / + 6 -             10 18 9 3

                 2           + 15 / + 6 -                          10 18 27

                 3           15 / + 6 -                            10 45      

                 4           15 /+ 6 -                             10 45 15    

                 5           + 6 -                                 13          
                 6         -                                13 6
               7                                           7       

           


                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值