
共享栈
两个栈 共享一片存储空间



栈s1 需要存6个 而栈s2 只需要存1个
栈s2 有多余的存储空间 但是它不需要,但是栈s1需要存更多的元素 但是没有更多的存储空间
如果能把栈s2 多余的存储空间给栈s1用

共享栈 两个栈 共享同一片存储空间
这片存储空间不单独属于任何一个栈
结构
两个栈的栈底在这片存储空间的两端
当元素入栈的时候 两个栈的栈顶相向而行

第一个栈顶指针指向第一个存储空间的前一个位置
第二个栈顶指针指向最后一个存储空间的后一个位置
为了体现这两个栈顶指针属于一对共享栈
就不用两个单独的整型变量来表示他们
而是用长度为2的数组来表示这两个栈顶指针

栈空

入栈

栈满

不存在某个栈会单独栈满的情况
要栈慢 两个一块 栈满

用两个栈来模拟队列
向s1中入栈1、2、3、4,此时s1 栈底到栈顶是1,2,3,4
依次出栈s1 依次入栈s2 此时s2 栈底到栈顶是4,3,2,1
s2出栈 就为1,2,3,4 满足了队列的先进先出
下面看这个不符合的情况






出队序列是1,3,2 显然和我们的入队序列1,2,3是不一样的(在这里,两个栈 当作 一个队列 )
之前例子是依次性的把s1的元素全部出队
而这个例子是有间断性
模拟队列时规则:
如果你要向s2内导入元素 你必须把s1内的元素 全部导入s2





此时就不符合队的特性
一般用栈模拟队列时 两个栈的存储空间大小是一样的

网友评论