对数据结构中共享栈减少上溢的理解

共享栈是一种让两个栈共享同一内存空间的技术,有效避免了上溢和下溢问题,提高了空间利用率。当栈满(两栈顶指针相邻)时,才可能出现上溢。共享栈在资源有限的情况下尤其有用,它通过动态调整两个栈的大小来平衡存储需求,降低了上溢的可能性,从而节省存储空间。
摘要由CSDN通过智能技术生成

共享栈的定义

简单说就是两栈共用一片连续内存空间
(王道书定义:)共享栈就是让两个顺序栈(一片连续内存,栈就是顺序栈)共享一个一维数组空间,将两个栈的栈底设置在共享空间的两端, 两个栈顶向共享空间的中间延伸。 如图所示(再嫖张王道书的图):

为何使用共享栈

首先介绍一下上溢和下溢,对栈而言:栈满还存为上溢,栈空再取即下溢。上溢和下溢都修改了栈之外的内存,因此有可能导致程序崩溃。

那有人就会说,那我给每个栈都分配足够大的空间就能解决上溢了吧?
这么说确实有道理,但是却有以下的问题:
①给每个栈都分配足够大的空间不太现实
②栈内的数据在不断的变化,而一个栈只存储的一点数据的话,这样不就造成空间利用率过低

共享栈就是因此而生的,由上面共享栈的定义可以知道它能使两个栈的空间可以相互调节(因为是共用嘛),从而更有效地利用存储空间。只有当两栈栈顶相遇(即栈满,若不清楚栈满往下看)时,存储空间被用尽,之后再进栈才会产生上溢。

由于栈往往不止一个,如果通过给每个栈分配很大的空间来解决上溢,造成的是存储空间的浪费,因此采用共享栈能在保证节省存储空间的基础上,在一定程度上减少上溢。(直白点的解释就是一个栈数据多,一个栈数据少,我本来一个栈存不下那么多的数据,我通过空间共用的方法,把你没用到的空间用来存我的数据,既提高了空间利用率,又让我不上溢。再配张一个老哥不知道哪找的图:)

在这里插入图片描述

所以说某道题:采用共享栈的好处是( )” 答案为:节省存储空间,降低发生上溢的可能


栈满

举个例子描述一下栈满,对于栈底指针设为 top0= -1,top1=Maxsize这种情况,需要先移动指针再赋值,假设Maxsize=5。

在这里插入图片描述

从上述例子可以看出,栈满条件为top1-top0=1,即两栈顶指针相邻
栈满之后,如果再有push操作,就会发生上溢。


后记

①参考了很多网上零零碎碎的东西总结出来的,王道书上讲的也稀碎。
②文中有一张图源自 这个老哥

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值