栈--进栈,出栈指针修改的顺序问题

策略

设计一个顺序栈,附设的top指针有两种策略:

  • 指向当前栈顶元素
  • 指向栈顶上方空位

借助一篇文章深入分析二者的异同。

top指向栈顶

首先令top指向当前栈顶元素,这样进来一个新的元素时,新元素不能占据当前top指向的位置,需要把top指针挪一挪,一般是top++,但不排除题目中设计的是top–,不管怎样,都是把top指针往栈外拓展一个空位,虚位以待新成员。
出去一个新元素时,取出当前栈顶元素,也就是top值不能先变化,因为top表示的就是栈顶元数,取栈顶元素必须借助于top。

再看特殊情况:空栈时top值是什么?
这个很容易倒推:栈中有一个元素时,top = 0,那么栈空时,top = -1。
所以top = -1也是栈空的标识。

简单说,策略就是:进栈时top先动以拓展位置,出去时先取数据再动top。这样的策略就可以锁定:top指向的是栈顶结点了。

top指向栈顶上方空位

这种方式下,我们看一般情况下的插入:因为top指向的是当前栈顶的上方空位置,进来新朋友时,不必先拓展位置,因为早就未雨绸缪准备好了,直接放上来即可!top这个位置进来新的元素后,它就不能再招待这个新朋友了,它还需要准备下一次的未雨绸缪呢!因此,是先进数据,再更新top值。

而出栈元素的时候,就该明确,top并没有指向栈顶元素,栈顶元素必须借助top才能抓住,因此,top先收缩,可能是++,也可能是–,这不是核心。

那么空栈时候,top = 0,表示指向-1位置的上方。
简单说:进栈时,数据先进后调节top指针,出栈时先调节top指针,再取数据,便是:top指向的是栈顶外部的策略了!

应当看出这里的pattern,进出的指针更改顺序都是相反的。即:进来先改出去后改,反之亦然。
但是背后的逻辑也是很值得思考的。

在组成原理中的运用

以上是在数据结构中的分析,下面对应的例题是在组成原理中的运用。

堆栈寻址中,设A是累加器,SP是堆栈指示器, Msp 是SP指示的栈顶单元。如果进栈操作是: (A)>Msp,(SP)1>SP ,那么出栈的动作应该是: (SP)+1>SP,(Msp)>A

有了上面的铺垫,这个几乎不用多说。但是请看题中有一句话很有错误的引导作用,让你相信了SP指向的是栈顶单元!
Msp 是SP指示的栈顶单元
但是一分析,进栈时候,数据先进,位置后动,表示的是SP指向的是栈顶上方的空位。
所以,出栈时必须是先收缩SP,这里的外推是 (SP)1 ,那么自然收缩就是相反的 (SP)+1 ,再把数据交给 Msp .

以上。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值