目录
1.两栈共享内存
背 景:1.两个栈数据结构相同;
2.其中一个栈已经满了,而另一个栈还剩很多存储空间;
3.基于2很容易造成存储空间的浪费,基于1、2可以采用两栈共享同一数组的方式解决上述问题。
实现要点:1.定义一个大的数组,数组长度为M。数组下标为0的位置为栈1的栈底,数组下标为(M-1)为栈2的栈底;
2.定义两个栈顶top1和top2,存储数据时向中间延伸。
3.top1的初始值为-1.top2的初始值为M。在入栈过程中top1是 递增的,top2是递减的。
2.入栈操作
Sstack* pushin(Sstack *p,int e,int stackNumber)
{
if((p->top1+1)==(p->top2))
{
printf("the stack is full!\n");
return p;
}
if(stackNumber==1)
{
p->top1++;
p->data[p->top1]=e;
//printf("first e = %d,%d,%d\n",e,p->top1,p->data[p->top1]);
}
else if(stackNumber == 2)
{
p->top2--;
p->data[p->top2]=e;
}
return p;
}
3.出栈操作
Sstack* popout(Sstack *p,int stackNumber)
{
if(stackNumber == 1)
{
if(p->top1==(-1))
{
printf("the stack is empty!\n");
return p;
}
p->top1--;
}
else if(stackNumber == 2)
{
if(p->top2==M)
{
printf("the stack is empty\n");
}
p->top2++;
}
return p;
}
4.打印栈的内容
int printfs(Sstack p)
{
while(p.top1!=(-1))
{
printf("index = %d,num = %d\n",p.top1,p.data[p.top1]);
p.top1--;
}
while(p.top2!=M)
{
printf("index = %d,num = %d\n",p.top2,p.data[p.top2]);
p.top2++;
}
return 0;
}
5.主函数
int main()
{
Sstack p;
Sstack* q;
q = &p;
p.top1 = -1;
p.top2 = M;
pushin(q,12,1);
// printfs(p);
pushin(q,13,1);
pushin(q,14,1);
pushin(q,18,2);
pushin(q,19,2);
pushin(q,20,2);
printfs(p);
return 0;
}