您的位置:首页 > 其它

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

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

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

栈共享示意图

栈一共享空间栈二
栈一是从栈底开始的,而栈二是从栈顶开始(其实都是栈底)栈一的位置为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的链式实现吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐