共享栈

一、为什么使用共享栈?

我们都知道使用过程中我们给每个栈分配足够的空间是不太现实的,使用栈的时候,我们也不能保证栈有足够的空间,另外,栈是一个动态的存储结构,各个栈的实际大小在使用的过程中都会发生变化的,有时候其中一个已经上溢了,而另外一个还没用怎么使用。这样必定会造成空间的利用率降低。

二、定义

共享栈,即是两个栈使用同一段存储空间。


第一个栈从数组头开始存储,第二个栈从数组尾开始,两个栈向中间拓展。

当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;
  }
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值