两个栈共享连续存储单元

两个栈共享连续存储空间:它主要利用了栈底位置不变,栈顶位置动态变化的特性。
所以在定义栈顶指针时,需要定义两个栈顶指针。

双栈类型定义如下:

typedef  struct
   {  datatype  data[MAXSIZE];
       int top[2];   /*  栈顶指针  */
    }DqStack;

两个共享栈的压栈算法:

int push(STACK *s,ElemType x,int k){//将x元素压入到以s为栈空间的第k个栈中
if(s->top[0]+1==s->top[1])
    {
        printf("\n stack is full!");
        return 0;
    }
    if(k==0)
    {
        s->top[0]++;
        s->data[s->top[0]]=x;
    }
    else
    {
        s->top[1]--;
        s->data[s->top[1]]=x;
    }
    return 1;
    }

两个共享栈的出栈算法:

int pop(STACK *s,int k,ElemType *x)//将以s为栈空间的第k个栈顶元素取出
{
    if((k==0)&&(s->top[0]==-1))
    {
        printf("\n stack is free!");
    }
    if((k==1)&&(s->top[1]==Max))
    {
        printf("\n stack is free!");
    }
    if(k==0)
    {
       * x=s->data[s->top[0]];
        s->top[0]--;
    }
    else
    {
        *x=s->data[s->top[1]];
        s->top[1]++;
    }
    return 1;
}

取栈顶元素:

int stacktop(STACK *s,int k)//取栈顶元素
{
//ElemType x;
if(k==0)
    {
if (s->top[0]==-1)
{   printf("栈空!\n");
return 0;
}
printf("栈顶数据为:%d\n",s->data[s->top[0]]);
return 1;
    }
    else
    {
        if (s->top[1]==Max)
{   printf("栈空!\n");
return 0;
}
//x=s->data[s->top[1]];
printf("栈顶数据为:%d\n",s->data[s->top[1]]);
return 1;
    }
}

两栈共享连续存储空间,两个栈的栈底分别设在这个存储空间的两端的存储结构中,为了使两栈的空间能够做到互补余缺,减少溢出的可能性,两个栈的栈满溢出都不能按位置判别,仅当两栈的栈顶相遇时,才可能栈满溢出。代码最核心问题是在入栈,出栈时候判断栈满,栈空条件。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Redamancy_meng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值