打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用一个数组实现三个堆栈
一个要求是要有效率的使用存储空间,也就是这个数组。用数组实现一个堆栈是经典的堆栈实现,方法就是把新数据始终放到当前所有数据的最后。这样就需要一个指向最后一个数据位置的指针,这个指针也就是栈顶指针。要想实现三个堆栈,最简单的方法就是把数组划成三个部分,每个堆栈用一个。这样堆栈1用1,4,7...,堆栈2用2,5,8...,堆栈3用3,6,9...。这样原来的实现代码几乎不用修改,只要把指针的变化从加减一变成加减三就行了。但这个方法效率不高,因为空间已经被预留了。即使某个堆栈是空的,它的空间也不能被别的堆栈使用。

怎样做到“动态”划分呢?我们可以先考虑用一个数组实现两个堆栈。我们仍然用经典的方法来实现这两个堆栈,但是区别在于,其中的一个是从数组的尾部开始反向存储数据。这样的分配是动态的,因为我们没有事先划定边界,一个堆栈最多可以用到整个数组的大小,只要它没有跟另一个堆栈重叠。要保证这一点,我们需要一个变量来记载当前堆栈长度,并在push的时候和整个数组长度,以及另一个堆栈的长度做比较来判断是否重合。基于同样的想法,我们把第三个堆栈实现在数组的中部,然后新的数据交替的插入在上半部和下半部,这样可以保证空间的占用对前两个堆栈是公平的。比如起始点是mid,push进来的数据依次放在mid,mid-1,mid+1,mid-2,mid+2。。。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C语言指针安全及指针使用问题
总线错误与段错误
浅谈js编写堆栈
队列,栈,堆栈,数组,链表特点与区别
二分法查找有序数组中对应数据的索引
溢出
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服