(数据结构)两栈共享空间——程序实现例子

本文探讨了如何使用一个数组实现两个栈,解决顺序栈内存不足的问题。通过将一个数组的两端分别作为两个栈的栈底,避免了空间浪费,实现了栈的高效利用。
摘要由CSDN通过智能技术生成

栈的顺序存储结构只准栈顶输入元素,因此不存在线性表的插入建和删除时需要移动元素的问题。但是这样会导致内存不够用的问题,顺序栈必须事先确定数组存储空间大小,如果存储空间满了,就需要程序员进行编程操作扩展数组的容量。

这也太麻烦了,一个不行,我用两个!找两个相同类型的栈,同时在两个栈里各自开辟数组空间,漂亮!但是没想到:第一个已经满了,再存储元素的话就会溢出,另一个栈存储空间还很多。这不是浪费吗?

我们可以反过来想:用一个数组存储两个栈。这样不就解决了嘛。

数组有两个端点,两个栈就有两个栈顶,我们可以让一个栈的栈底作为数组的始端,即A[0],另一个栈的栈底作为数组的末端,即A[n-1]。如果我们想增加元素的话,这两个端点就会向中间延伸。

程序例子:

typedef struct
{
	SElemType data[MAXSIZE];
	int top1;			            //栈1的栈顶指针
	int top2;			            //栈2的栈底指针
}SqDoubleStack;

Status Push (SqDoubleStack *S, SElemType e, int stackNumber)
{
	if (S->top1 + 1 == S->top2)	    //栈满,不能增加新元素
	return ERROR;

	if (stackNumber == 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄TimTim仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值