顺序栈采用一个数组存放栈中的元素。如果需要用到两个类型相同的栈,这时若为它们各自开辟一个数组空间,极有可能出现这样的情况:第一个栈已满,再进栈就溢出了,而另一个栈还有很多空闲的存储空间。解决这个问题的方法是将两个栈合起来,用一个数组来实现这两个栈,这称为共享栈(share stack)。
在设计共享栈时,由于一个数组(大小为MaxSize)有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈的栈底为数组的末端,即下标为MaxSize一1处,这样在两个栈中进栈元素时栈顶向中间伸展。
共享栈的4个要素如下。
栈空条件:栈1空为top1==-1;
栈2空为top2==MaxSize。
栈满条件:top1==top2-1。
元素进栈的操作:进栈1操作为 top1++; data[top1]=x;
进栈2操作为 top2--; data[top2]=x。
出栈的操作:出栈1操作为x=data[top1]; top1--;
出栈2操作为x=data[top2]; top2++。
struct DStack
{
ElemType data[MaxSize];
int top1,top2;
};