两栈共享空间的结构的代码如下:
typedef struct
{
SElemType data[MAXSIZE];
int top1; //栈1栈顶指针
int top2; //栈2栈顶指针
}SqDoubleStack;
对于两栈共享空间的push方法,我们除了要插入元素值共享参数外,还需要有一个判断是栈1还是栈2的栈号参数stackNumber,插入元素的代码如下:
/*插入元素e为新的栈顶元素*/
Status Push(SqDoubleStack *S, SElemType e, int stackNumber)
{
if(S->top1+1 == S->top2) //栈已满
return ERROR;
if(stackNumber ==1) //栈1有元素进栈
S->data[++S->top1] = e; //栈1指针先向右移1位,然后赋值
else if(stackNumber ==2) //栈2有元素进栈
S->data[--S->top2] ==e; //栈2指针先向左移1位,然后赋值
return OK;
}
两栈共享空间的pop代码如下:
/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
Status Pop(SqDoubleStack *S, SElemType *e, int stackNumber)
{
if(stackNumber ==1)
{
if(S->top1 == -1)
return ERROR; //说明栈1已经是空栈,报错
*e = S->data[S->top1--] //栈1的栈顶元素出栈
}
else if(stackNumber ==2)
{
if(S->top2 ==MAXSIZE)
return ERROR; //说明栈2已经是空栈,报错
*e = S->data[S->top2++] //栈2栈顶元素出栈
}
}
上面的方法具有局限性,仅适用于具有相同数据类型的两个栈。