栈的经典案例,及后缀表达式的原理
在程序开发中我们都是使用中缀表达式例如:
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 - + 是怎么得出来的,怎么回事这个样子呢,接下来我们就一步一步分析他是怎么得出来的结果,我画了一张图,里面详细介绍了每一步都转换过程
