一、为什么使用共享栈?
我们都知道使用过程中我们给每个栈分配足够的空间是不太现实的,使用栈的时候,我们也不能保证栈有足够的空间,另外,栈是一个动态的存储结构,各个栈的实际大小在使用的过程中都会发生变化的,有时候其中一个已经上溢了,而另外一个还没用怎么使用。这样必定会造成空间的利用率降低。
二、定义
共享栈,即是两个栈使用同一段存储空间。
第一个栈从数组头开始存储,第二个栈从数组尾开始,两个栈向中间拓展。
当top1+1==top2或者top1==top2-1时,即staock overflow!.
与普通栈一样,共享栈出栈入栈的时间复杂度仍为O(1).
三、样例
下面提示部分代码为:将一个元素item插入第1或者第2个栈的方法;
int Push(int top[],int i,int item)
{
// 栈满了,插入失败,返回一个0;
if (top[0] == top[1] - 1)
{
return 0;
}
else
{
if (i == 1)
{
top[0] ++;
}
else
{
top[1] --;
}
stack[top[i - 1]] = item; // 插入元素item;
return 1; // 栈没满,插入成功;
}
}
// 删除操作同样地方法;
int Pop(int top[],int i,int& item)
{
if (i == 1)
{
if (top[0] == -1)
{
return 0; // 栈1为空,删除失败;
}
else
{
item = stack[top[0]--];
return 1;
}
}
else
{
if (top[1] == MaxSize)
{
return 0; // 栈2为空,删除失败,返回0;
}
else
{
item = stack[top[1]++];
return 1; // 栈2为非空,删除成功,返回1;
}
}
}