数据结构----顺序栈中的多栈共享(双端顺序栈)

文章介绍了为了解决顺序栈空间利用率低和溢出问题,采用多栈共享一个大数组空间的方法。定义了一个名为DqStack的结构体,包含两个栈顶指示器,实现了初始化、进栈和出栈操作。进栈和出栈函数通过判断栈号进行操作,确保了存储空间的有效利用。
摘要由CSDN通过智能技术生成

引言:在使用顺序栈时因为对栈的空间大小难以准确估计,从而就引起了有的栈的溢出,有的栈空间还很空闲的情况。为了解决这个问题,可以让多个栈共享一个足够大数组空间,通过利用栈的动态特性来使其存储空间互相补充,即多栈共享。


两栈共享的数据结构定义如下:

#define M 100
typedef struct{
int elem[M];
int top[2];//top[0]和topp[1]分别为两个栈顶指示器
}DqStack

初始化:

void InitStack(DqStack){

S->top[0];

S->top[1];

}


双端顺序栈进栈:

int Push(DqStack *S,StackElementType x,int i){
if(S->top[0]+1==S->top[1])return(false);
switch(i){
case 0:S->top[0]++;       //0栈
S->elem[S->top[0]]=x;
break;
case 1:                    //1栈
S->top[1]++;
S->elem[S->top[1]]=x;break;
default:
return False;
}
retuen False;
}

双端顺序栈出栈

int Pop(DeqStack *S,StackElenType *x,int i)
//从i号栈中弹出栈顶元素并传递到x中
{
switch(i){
case 0:                //0号栈
if(top[0]==-1)return false;
*x=S->elem[S->top[0]];
S->top[0]--;
case 1:                //1号栈
if(top[1]==S)return false;
*x=S->elem[S->top[1]];
S->yop[1]++;
default:
return false;
}
return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值