栈的经典案例,及后缀表达式的原理

2018-02-02  本文已影响0人  mlyman

在程序开发中我们都是使用中缀表达式例如:

    3 × 2 +1 ÷ ( 6÷3) - 7 

运算符都是在两个操作数的中间部分,而计算机通常使用的是后缀表达式;那什么是后缀表达式呢,举例说明,我们知道在数学运算中是有优先级的,一般是带有括号的优先级最高,然后是乘除法,之后再是加减法,而计算机为了提高效率,会把数字放在运算符的前面,例如:3 × 2 则变成 32*,在计算的时候就把运算符前面两个数相乘就是要得到的结果,这就是后缀表达式。通俗的讲后缀表达式是在计算机运算符放置操作数的后面的转换,大概就是这个意思,但是他也有一定规则在里面。

我们先讲一下转换的一个规则,然后我们套用规则把他转换成后缀表达式,规则如下

1.遇到数字直接输出

2.遇到运算符直接入栈;有人可能就不有点听不太懂了,怎么扯上栈了呢,其实在转换过程中就是利用了堆栈,他内部创建了一个堆栈,用来存储运算符,根据优先级进行进栈出栈;我们看一下运算符都有哪些:()、× 、÷、 +、- 下面我们讲一下进栈出栈的规则

    (1).如果栈里面为空,那运算符直接入栈,如果栈里面有运算符,就跟栈顶的运算符比较谁的优先级高,如果比栈顶的优先级高就直接入栈,如果优先级高就直接出栈顶在入栈

      (2).如果遇到小括号就把栈中小括号包含的的运算符逐个出栈,小括号不输出,只输出运算符    

      (3).如果遇到优先级同级的也要入栈

下面我就套用上面的规则,转换后缀表达式的结果是:3 2 * 1 6 3 / / 7 - +

那计算机是怎么计算的呢:

第一步把3和2相乘的6之后输出为6;那第一步运算的结果为:6 1 6 3 / / 7 - +

第二部把6和3相除输出2,结果为:6 1 2 / 7 - +

第三步把1和2相除为0.5,结果为:6  0.5  7 - + 

第四步把0.5和7相减为-6.5,结果为:6  -6.5  +

第五步把6和-6.5相加,结果为:-0.5

那我们计算一下  3 × 2 +1 ÷ ( 6÷3) - 7 的结果就是 -0.5

注意每次计算是拿着运算符前面两个数进行运算,然后输出结果

到这里想必有人已经明白了计算机的是怎么计算的,但是有没有人有疑问,这个后缀表达式:3 2 * 1 6 3 / / 7 - +  是怎么得出来的,怎么回事这个样子呢,接下来我们就一步一步分析他是怎么得出来的结果,我画了一张图,里面详细介绍了每一步都转换过程

上一篇 下一篇

猜你喜欢

热点阅读