美文网首页
栈的扩展

栈的扩展

作者: sakura579 | 来源:发表于2020-08-24 09:56 被阅读0次

共享栈

两个栈 共享一片存储空间

栈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 满足了队列的先进先出

下面看这个不符合的情况


2.png 3.png 4.png 5.png 6.png

出队序列是1,3,2 显然和我们的入队序列1,2,3是不一样的(在这里,两个栈 当作 一个队列 )
之前例子是依次性的把s1的元素全部出队
而这个例子是有间断性

模拟队列时规则:
如果你要向s2内导入元素 你必须把s1内的元素 全部导入s2


此时就不符合队的特性

一般用栈模拟队列时 两个栈的存储空间大小是一样的

相关文章

  • 寄存器

    esp 扩展栈指针寄存器指向当前栈顶即保存着当前栈顶的地址 ebp (扩展基址指针寄存器) 指向当前栈底即保存...

  • 栈的扩展

    共享栈 两个栈 共享一片存储空间 栈s1 需要存6个 而栈s2 只需要存1个 栈s2 有多余的存储空间 但是它不需...

  • 性能优化-内存管理

    内存布局 栈区向下扩展 堆区向上扩展 由于内存有限,如果碰面就会出现堆栈溢出的情况 在栈区里面因为方法 函数 会形...

  • iOS逆向007--数据结构(一):堆栈、哈希表、时间复杂度、链

    堆和栈的区别 1、管理方式: 2、申请大小: 2.1 栈(stack):在Windows下,栈是向低地址扩展的数据...

  • 栈溢出

    栈中压入数据栈顶指针地址变小 pop数据栈顶指针地址变大 也就是说栈底指针地址大于栈顶地址 EIP:扩展指令指针。...

  • 编译器笔记24-语法制导翻译-在非递归的预测分析过程中进行翻译(

    在非递归的预测分析过程中进行翻译 扩展语法分析栈 要想在非递归的预测分析过程中进行翻译,需要对语法分析栈进行扩展,...

  • app内存分配

    栈区(stack) 存储局部变量 概述:栈是向低地址扩展的数据结构,是一块连续的内存区域。由栈顶的地址和栈的最大容...

  • valgrind使用备注

    使用-fstack-check后会导致valgrind的main线程栈无法扩展

  • iOS 的内存与存储区域

    1.栈区(stack)概述:栈是向低地址扩展的数据结构,是一块连续的内存区域。由栈顶的地址和栈的最大容量是系统预先...

  • 全栈工程师书单

    全栈工程师书单 《全栈工程师的自我修养》—余果 扩展书单 什么是全栈工程师 《黑客与画家》《专业主义》...

网友评论

      本文标题:栈的扩展

      本文链接:https://www.haomeiwen.com/subject/afxwjktx.html