数据结构笔记6-栈的应用之前中后缀part1

      栈的应用-------四则运算表达式求值

后缀(逆波兰)表示法的定义(RPN)

        所有的符号都是在要运算数字的后面出现。

        后缀表达式求值从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号就将处于栈顶两个数字出栈(次顶元素 op 栈顶元素),进行运算,运算结果进栈,一直到最终获得结果。

        中缀表达式转后缀表达式从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号优先级不高于栈顶符号(乘除优先加减,左括号优先加号),则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。

小技巧:在做中缀转后缀的选择题时,以左括号为界,括号两边优先级上升。

前缀表达式的求值原则

         从右往左扫描表达式,遇操作数就入栈,遇运算符则从栈中被中弹出的两个操作数,先出栈的是第一个操作数,进行相应运算后将运算结果入栈。如此,直至前缀表达式扫描结束,栈中只剩一个操作数,就是运算结果。
        如中缀A+B-C    一>前缀-+ABC

        运算时注意C是后弹的, 是第二个操作数。
        请注意:前缀表达式和后缴表达式操作数的顺序是相同的,但是因为求值从不同方向扫描,所以在后缀表达式求值中,
后出栈的是第一个操作数,这对于减法和除法来说,是非常重要的。
 

几个技巧:

        前缀和后缀表达式是描述不带括号信息的数字表达式的两个方法,因此在输出后缀时不应该输出括号!

        计算后缀表达式和前缀表达式的时间开销是O(n),其中n是表达式中字符的个数。

        中缀表达式和后缀表达式中数字之间的相对位置是没有改变的,如2+3*4,234*+。

利用栈直接计算中缀表达式
        算法: 1)创建一个空的操作符栈
                2)创建一个空的操作数栈
                3)对于输入字符串的每个字符
                        a)从输入串中读入下一个字符
                        b)如果读入的字符是操作教,那么将其压入操作数栈中,
                        c)如果读入的字符是操作符,那么
                                i. 评估该操作符 (next op)
               4)当操作符栈不为空时,弹出栈顶操作符(opera tor), 同时从操作数栈中弹出栈顶操作数(右操作数right)和次栈顶操作数(左操作数left),计算left operator right,并将结果压入操作数栈中。
              5)弹出并返回操作数栈(此时其中只有一个元素)中的元素

 

尾递归:尾调用是指个函数里的最后一个动作是一个函数调用的情形,即这个调用的返回直接被
当前函数返回的情形。这称调用位置为尾位置。若这个函数在尾位置调用本身(或是一个尾调用本
身的其他的函数等等),则称为尾递归,是递归的个特殊情形。尾调用不一定是递归调用但尾递归特别有用。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值