1.栈的定义
栈是仅在表尾进行插入和删除操作的线性表,特点是先进后出(下面举个例子以便大家易于了解)。
例:有3个整形元素1,2,3依次进栈,则有5种出栈次序。
1)1,2,3进,再3,2,1出
2)1进,1出,2进,2出,3进,3出
3)1进,2进,2出,1出,3进,3出
4)1进,1出,2进,3进,3出,2出
5)1进,2进,2出,3进,3出,1出
2.两栈共享空间
适用:两栈共享空间常应用于1个栈存储空间常常不够,而另一个栈存储空间常常空余很多的情况下。
特点:两栈共享空间是指两个栈,1个栈从头开始,向中间延伸,而另一个栈,从尾开始,向中间延伸。(以下附图,以便于理解)
两栈空间满的情况多是top1 + 1 = top2
3.对两栈共享空间进行插入删除操作
进行插入删除操作时首先需要判断是栈1 还是栈2 的栈号参数stackNumber
删除代码举例:
//删除S的栈顶元素,用e返回其值
Status Pop ( SqDoubleStack *s, SElemType *e, int stackNumber )
{
if ( stackNumber ==1 )
{
if ( S-> top1 ==1)
return ERROR;
*e= S->data[S->top1--]; //将栈1的栈顶元素出栈
}
else if (stackNumber ==2)
{
if (S->top2== MAXSIZE)
return ERROR;
*e =S->data[S->top2++]; //将栈2的栈顶元素出栈
}
return ok;
}
注意:要是两个具有相同数据类型的栈这样用才方便