共享栈

利用栈底位置不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。共享栈是为了更有效地利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才发生上溢。


共享栈的存储结构
typedef struct
{
    Status dstack[maxsize];
    int top[2];
} DStack;


初始化共享栈
void InitStack(DStack &S)
{
    S.top[0] = 0;
    S.top[1] = maxsize;
}


进栈
int push(int i, ElemType x, DStack &S)//i 为栈号 i=0 表示左边的s1的栈,i=1 表示右边s2的栈
{
    if(i<0||i>1)
        return 0;
    if(S.top[1]-S.top[0] == 1)
        return 0;
    switch(i)
    {
    case 0:
        S.dstack[++S.top[0]] = x;
        break;
    case 1:
        S.dstack[--S.top[1]] = x;
        break;
    }
    return 1;
}


出栈
int pop(DStack &S,int i,ElemType &e)
{
    if(i<0||i>1)
        return 0;
    if(S.top[1]==maxsize || S.top[0]==-1)
        return 0;
    switch(i)
    {
    case 0:
        e = S.dstack[S.top[0]--];
        break;
    case 1:
        e = S.dstack[S.top[1]++];
        break;
    }
    return 1;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。