android 逆波兰表达式的应用(二)逆波兰表达式的计算 -----小达

来源:互联网 发布:剑网正太捏脸数据 编辑:程序博客网 时间:2024/06/05 15:13

逆波兰表达式的计算

       
       上一篇博客中详细的讲解了如何将中缀表达式一步一步按照规则转化为后缀表达式,转化的目的就是不利用括号,能够将运算符的先后运算顺序清楚的表达出来,并让计算机很容易的去计算,接下来要介绍的内容就是和逆波兰表达式计算有关的.


        逆波兰表达式的计算其实很容易,只需要建立一个栈,里面存放数字,遇到运算符直接从数字栈里弹出数字进行计算,将结果压入栈中即可,运算完毕后,存留在数字栈中的那个数字即需要的结果.


        我们还是接着上一个例子,上篇博客中我们将中缀表达式:
                                                                                                      9 * ( 3 - 2 / 1 ) + 1
        转化为了后缀表达式:
                                                                                              9,3 ,2 ,1,/ , - ,* ,1,-
        
        先建立一个栈,遇到数字就直接压入栈中,还是老规矩,用红色的字体来表示当前数字栈,左边栈底,右边栈顶.
        
        前面的四个数字不用说了,直接入栈.      数字栈  9 , 3 , 2 , 1
        
        很快的,我们迎来了第一个运算符,有木有点小鸡冻(原谅我的逗*),由于  ' / '是一个二元运算符,所以从数字栈中弹出两个操作数 ' 1 ' 和 ' 2 '出来, ' 1 '先被弹出栈,作为被操做数, ' 2 '在后面,作为操作数,用 2 /1 ,结果为 ' 2 '压入栈中.数字栈  9 , 3 , 2 

        接着是  ' - ' ,弹出  ' 3 ' 和 ' 2' ,运算结果为 ' 1 ',压入栈中,  数字栈  9 , 1
 
          碰到 ' * ',弹出 ' 9 ' 和 ' 1' ,运算结果 ' 9 ' 压入数字栈中     数字栈  9 

        后面有一个数字 ' 1 ',直接压入栈中 ,   数字栈  9 , 1
    
          最后一个操作符了,即将迎来后缀表达式的运算结果, 我们用中缀表达式计算的结果是 8 , 后缀表达式计算的结果也为 8 .

        有没有体会到后缀表达式的无脑,,,不像中缀表达式那样还要考虑谁先算后算,先算后算在转化为后缀表达式的过程中已经处理好了,我们交给计算机的任务就是这么简单,只需无脑的,碰到操作符就拿数字出来算一算,再放回去,算得没有了,往栈里面一瞄,就是最后想要的结果...

        今天的逆波兰表达式计算就到这里咯,在后面的博客中我们将用java代码来实现后缀表达式的转化和计算.~~~~~

0 0
原创粉丝点击