两个栈共享连续存储单元

。_饼干妹妹 提交于 2020-02-03 20:47:35

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

双栈类型定义如下:

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;
    }
}

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!