一、数摞的交换
现在你来充当计算操作员,计算过程由指令员来指挥。指令员要做一个算术运算20-3*4,按照算术运算的优先规律应该先乘除后加减。所以指令员先将两个要相乘的数告诉你,由你按顺序将这两个数放入数摞:
4
3
接下来指令员又发出乘法指令,你计算出3 *4的结果,并将数摞上的3和4去掉,然后将结果12放入数摞:
12
指令员又将20告诉你,你随即将20放入数摞:
20
12
这时如果指令员发出减法的指令就出现问题了,因为减法没有交换规律,按规律必须是前面的数减去后面的数。在我们数摞上前面的数就是先进入的数,如果直接进行减法操作,就变成了12-20,为了解决这类问题,引入了一些数摞操作符。象上面的减法问题只要将两个数进行一次交换再执行减法就可以了。我们用符号“↑↓”表示交换操作。这样指令员在发出减法指令以前就必须发出“↑↓”指令,你就将数摞上数据的顺序交换一下,变成:
12
20
然后指令员再发出减法指令,你在做完减法后就可以将12和20去除,并将计算结果8放入数摞:
8
这个过程用汉语编程语言可以表述下面的形式:
3 4 * 20 ↑↓ -
以上只是为了说明问题举了一个例子,当然对于这样一种简单的计算完全可以写成另一种简化的形式
20 3 4 * -
我们放物品并不一定都是竖向摞置,有时要横向码放,如书架上的书基本上是横向码放的。为了表达方便,我们在表示数摞时常常也用横向方式来表示数摞里的状态。我们写文章时习惯从左至右,如果写的是数就进入数摞保存起来,先进入数摞的就在左边而后进入的就在右面。用横向法表示数摞时则记忆为右边的数在上,左边的数在下。如1 2 3 则表示为:
3
2
1
为了表达方便,我们还引入了数摞操作表述符号“―――”,并将操作前的数摞状态写在“―――”的左边,操作后的数摞状态写在右边,规范的写法应该为三个“―”,请读者养成良好的习惯。数摞上的数可以是一些代号,如“n1”、“n2”等等。如上面的“↑↓”操作,就表示为:
↑↓ ( n1 n2 ―――n2 n1 )
它代表
n1 n2 ↑↓ n2 n1
而对于“+”操作就表示为:
+ ( n1 n2 ―――n3 )
其中n3是n1与 n2之和。