两栈共享空间相关操作

1.栈的定义
栈是仅在表尾进行插入和删除操作的线性表,特点是先进后出(下面举个例子以便大家易于了解)。

例:有3个整形元素123依次进栈,则有5种出栈次序。
1123进,再32121进,1出,2进,2出,3进,331进,2进,2出,1出,3进,341进,1出,2进,3进,3出,251进,2进,2出,3进,3出,1

2.两栈共享空间
适用:两栈共享空间常应用于1个栈存储空间常常不够,而另一个栈存储空间常常空余很多的情况下。
特点:两栈共享空间是指两个栈,1个栈从头开始,向中间延伸,而另一个栈,从尾开始,向中间延伸。(以下附图,以便于理解)
在这里插入图片描述
两栈空间满的情况多是top1 + 1 = top2
3.对两栈共享空间进行插入删除操作
进行插入删除操作时首先需要判断是栈1 还是栈2 的栈号参数stackNumber
删除代码举例:

//删除S的栈顶元素,用e返回其值
Status Pop ( SqDoubleStack *s, SElemType *e, int stackNumber )
{
if ( stackNumber ==1 )
  {
     if ( S-> top1 ==1)
     return ERROR;
     *e= S->data[S->top1--];  //将栈1的栈顶元素出栈
     }
     else if (stackNumber ==2)
     {
       if (S->top2== MAXSIZE)
       return  ERROR;
       *e =S->data[S->top2++];  //将栈2的栈顶元素出栈
       }
       return ok;
       }

注意:要是两个具有相同数据类型的栈这样用才方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值