关于两个栈的共享空间问题理解。

来源:互联网 发布:电视直播网站php源码 编辑:程序博客网 时间:2024/06/05 06:17

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

共享空间可以解决一定的问题。

栈共享示意图栈一共享空间栈二

栈一是从栈底开始的,而栈二是从栈顶开始(其实都是栈底)栈一的位置为stack[0],栈二为stack[MaxSize-1];通过观察,只有当栈一和栈二的栈顶指针相遇时,这两个栈才满了,溢出来了。

忘了交代一下,这两个栈的栈顶指针相加正好为MaxSize-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;
  }
 }
}

 

总结一下,这样的共享空间问题,估计是我很少遇到的。因为多个栈共享连续的空间优点很明显:节省空间。但是弊端很大,就是要移动大量的数据元素,这样也体现了顺序表固有的缺陷。不提倡。接下来看stack的链式实现吧。

原创粉丝点击