什么是堆栈?
2015-08-09 08:56
267 查看
类似于队列,堆栈是个简单的数据存储结构。堆栈中数据进出的顺序很重要,举个例子,餐厅的盘子堆,盘子洗完要堆到上面,而不是插到下面的某个位置(相信不会有人那么做)。当厨师要用到盘子时从最上面的开始拿。即最先放在堆里的盘子会被最后一个用到。
定义:堆栈就是只能在一端插入和删除数据的链表,这个端就叫做栈顶(top),最后一个添加的数据第一个被删除。因此,这也叫后进先出(LAST IN FIRST OUT)链表或是先进后出链表(FIRST IN LAST OUT)。
对于堆栈有两种操作:
进栈指令(PUSH):在栈中现有元素顶部添加一个元素,新加入的元素变为最顶端的元素。
出栈指令(POP):取出栈顶元素,删除栈中的这个元素。
有些情况下,栈的最大长度有限。如果栈中元素已经达到最大长度,再用进栈指令会造成堆栈上溢出(stack overflow),相似的,如果堆栈已空还用出栈指令会造成堆栈下溢出(stack underflow)。
下面是堆栈PUSH和POP操作的示意图:
现实生活的堆栈案例
办公室中的一天,一个开发者正在开发一个长期的工程项目。这时候老板给他分配了一个新的任务,说这个任务更加重要。开发者将长期任务放在一边开始这个新的任务。如果这时候电话响了,开发者就要将前两项任务放在一边(PUSH)去接电话,当电话接完了,再回到刚才的重要任务(POP),这也完成之后,再继续(POP)他的长期项目。
堆栈的主要操作:
PUSH:向堆栈中加入数据。
POP:取出堆栈中的数据。
其他操作:
int Top( ):取出栈顶元素。
int Size( ):返回栈的长度。
int isStackEmpty( ):检查堆栈是否为空。
定义:堆栈就是只能在一端插入和删除数据的链表,这个端就叫做栈顶(top),最后一个添加的数据第一个被删除。因此,这也叫后进先出(LAST IN FIRST OUT)链表或是先进后出链表(FIRST IN LAST OUT)。
对于堆栈有两种操作:
进栈指令(PUSH):在栈中现有元素顶部添加一个元素,新加入的元素变为最顶端的元素。
出栈指令(POP):取出栈顶元素,删除栈中的这个元素。
有些情况下,栈的最大长度有限。如果栈中元素已经达到最大长度,再用进栈指令会造成堆栈上溢出(stack overflow),相似的,如果堆栈已空还用出栈指令会造成堆栈下溢出(stack underflow)。
下面是堆栈PUSH和POP操作的示意图:
现实生活的堆栈案例
办公室中的一天,一个开发者正在开发一个长期的工程项目。这时候老板给他分配了一个新的任务,说这个任务更加重要。开发者将长期任务放在一边开始这个新的任务。如果这时候电话响了,开发者就要将前两项任务放在一边(PUSH)去接电话,当电话接完了,再回到刚才的重要任务(POP),这也完成之后,再继续(POP)他的长期项目。
堆栈的主要操作:
PUSH:向堆栈中加入数据。
POP:取出堆栈中的数据。
其他操作:
int Top( ):取出栈顶元素。
int Size( ):返回栈的长度。
int isStackEmpty( ):检查堆栈是否为空。
相关文章推荐
- 黑马程序员---OC autorelease
- UVA - 10972 RevolC FaeLoN (边双连通分量)
- poj 1088 滑雪【记忆化搜索】
- 8月9日,牢骚第一阶段 暑假一期计划
- 有哪些高效但是不常见的Linux命令?
- Proguard returned with error code 1. see console
- 六足机器人的实现原理
- python 按照list中的dic的某key排序
- Log4J简易配置
- 剑指Offer面试题32(java版):从1到n整数中1出现的次数
- IIS发布ASP.NET MVC4.0教程
- Scala中Curring实战详解之Scala学习笔记-16
- Linux下批量修改文件名
- php安装mysql扩展,版本不一致的解决办法
- GPS定位原理
- 出现localStorage错误Link解决方案(组态)
- 第28讲:Scala提取器Extractor
- 解决VS2015安装Android SDK 后文件不全及更新问题
- 数据库调优
- [G+SMO]paraview pvd文件转化为obj/stl等网格文件