共享栈

在一个程序中如果同时具有相同类型的两个顺序栈,最直接的方法是为每个栈开辟一个一个数组空间,这样做的结果可能出现一个栈的空间已经被占满而无法再进行操作而另一个栈的空间仍有大量剩余而没有得到利用的情况,从而造成储存空间的浪费
我们可以利用顺序栈的单向延伸的特点,使用一个数组来存储两个栈,让一个栈底位于该数组的始端,另一个栈的栈底位于该数组的末端,每个栈从各自的端点开始向中间相向延伸。如图:
(下面实现的时候,测试数据的描述)

两个栈的共享空间中,由于两个栈相向增长,浪费的数组空间就会减少,同时发生上溢出的概率也会减少。但是,一般只有两个栈的空间需求有相反的关系时,这种方法才会奏效。
也就是说,最好一个栈伸长一个栈缩短,有 “此消彼长” 的势头。
“敌进我退,敌退我追” 倒是可以描述这种结构。

编写这种数据结构只要有顺序栈的基本基础就OK,下面是我之前编写的

【数据结构与算法】共享栈的Java实现相关推荐

  1. 数据结构与算法之栈入门题目

    数据结构与算法之栈题目 目录 用数组实现大小固定的队列和栈 实现一个特殊的栈,在实现栈的基础功能上,再实现返回栈中最小元素的操作 如果仅用栈结构实现队列结构和如何仅用队列结构实现栈结构 1. 用数组实 ...

  2. 数据结构与算法--利用栈实现队列

    利用栈实现队列 上一节中说明了栈的特点 后进先出,我们用数组的方式实现了栈的基本操作api,因此我们对栈的操作是不考虑排序的,每个api的操作基本都是O(1)的世界,因为不考虑顺序,所以找最大,最小值 ...

  3. 数据结构与算法--简单栈实现及其应用

    栈 栈(Stack)是一种限制插入和删除只能在一个位置上进行的表,改位置是表的末端,叫做栈顶top.栈的基本操作有push (进栈)pop(出栈) 栈又叫做LIFO(后进先出)表,下图展示普通push ...

  4. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  5. 新星计划Day7【数据结构与算法】 栈Part1

    新星计划Day7[数据结构与算法] 栈Part1

  6. java stack 从1.5开始?_java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 栈是一种用于存储数据的简单数据结构,有点类似链表或者顺序表(统称线性表),栈与线 ...

  7. Java数据结构与算法:栈

    原文出处:http://www.cnblogs.com/skywang12345/p/3562239.html 注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈 1. 栈的介绍 栈(stack) ...

  8. 【数据结构与算法】栈与队列

    栈 一.什么是栈? 1.后进者先出,先进者后出,这就是典型的"栈"结构. 2.从栈的操作特性来看,是一种"操作受限"的线性表,只允许在端插入和删除数据. 二.为 ...

  9. 数据结构与算法(二) 栈与队列(代码示例)

    数据结构与算法 栈与队列 1. 数组和链表实现栈 2. 用O(1)的时间复杂度求栈中的最小元素 3. 链表和数组实现队列 4. 用两个栈模拟队列操作 1. 数组和链表实现栈 链表的方式: /*** 描 ...

最新文章

  1. Wiz开发 定时器的使用与处理
  2. 【BJDCTF 2nd—MISC/Crypto】做题+复现记录
  3. P3321 [SDOI2015]序列统计(未解决)
  4. java对响应数据做封装_1000种对Java的响应没有死
  5. Android用Intent和Bundle传list
  6. leetcode264. 丑数 II
  7. mysql自增字段_MySQL自增字段的常用语句
  8. 步骤一:入门linux基础/01Linux简介和安装/002Linux发行版的介绍
  9. Ubuntu Make新版上线:支持安装Swift编程语言
  10. Activity onSaveInstanceState(Bundle)
  11. java ftps 证书_FTPS (FTP over SSL) vs. SFTP (SSH 文件传输协议): 我们如何做出选择
  12. 搜索引擎如何优化?这些方法要知道
  13. 普通运维人员就是秋后的蚂蚱!
  14. Python+Django实现基于人脸识别的门禁管理系统,附带源码!!
  15. Linux中的进程、线程和文件描述符
  16. week16 csp-m4
  17. 使用pm2来保证Spring Boot应用稳定运行
  18. dddddddddddddddddd
  19. 无刷云台怎么动态调整控制参数
  20. avada和divi哪个好

热门文章

  1. WSDL4J解析WSDL文件方法
  2. Unity3d通用工具类之定时触发器
  3. 在存储过程中编写正确的事务处理代码
  4. C#如何[添加][删除][修改]XML中的记录
  5. python3 多继承搜索__init__方法的两种策略
  6. PHP出现 Notice: Undefined index:...的原因及解决办法
  7. python爬silverlight_Python创建Silverlight控件编写过程经验分享
  8. combobox异步加载 easyui_如何解决多条数据加载easyui-combobox样式反应慢的问题
  9. java 数据库 事务 只读_不使用事务和使用只读事务的区别
  10. java中static关键字简介