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