码迷,mamicode.com
首页 > 其他好文 > 详细

栈、队列、堆

时间:2015-01-02 01:04:22      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

新年伊始 再破一谜团

区别参考

队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作
栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。

{堆是指程序运行是申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。}

栈是先进后出的,但是于堆而言却没有这个特性,两者都是存放临时数据的地方。

对于堆,我们可以随心所欲的进行增加变量和删除变量,不要遵循什么次序,只要你喜欢。

 

队列是计算机中常用的两种数据结构,是操作受限的线性表。栈的插入 和删除等操作都在栈顶进行,它是先进后出的线性表。队列的删除操作在队头进 行,而插入、查找等操作在队尾进行,它是先进先出的线性表。与线性表一样, 栈和队列有两种存储结构,顺序存储的栈称为顺序栈,链式存储的栈称为链栈。 顺序存储的队列称为顺序对列,链式存储的队列称为链队列。 为解决顺序队列中的假溢出问题,采用循环顺序队列,但出现队空和队满的 判断条件相同的问题,判断条件都是:front==rear。采用少用一个存储单元来 解决该问题。此时,队满的判断条件是: (rear+1)%maxsize==front,判断队空 的条件是:rear==front。 栈适合于具有先进后出特性的问题,如括号匹配、表达式求值等问题;队列 适合于具有先进先出特性的问题,如排队等问题。

线性表是最简单、最基本、最常用的数据结构,线性表的特点是数据元素之 间存在一对一的线性关系,也就是说,除第一个和最后一个数据元素外,其余数 据元素都有且只有一个直接前驱和直接后继。 线性表有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储 的线性表称为顺序表,顺序表中的存储单元是连续的,在 C#语言中用数组来实 现顺序存储。链式存储的线性表称为链表,链表中的存储单元不一定是连续的, 所以在一个结点有数据域存放数据元素本身的信息,还有引用域存放其相邻的数 据元素的地址信息。单链表的结点只有一个引用域,存放其直接后继结点的地址 信息,双向链表的结点有两个引用域,存放其直接前驱结点和直接后继结点的地 址信息。循环链表的最后一个结点的引用域存放头引用的值。 对线性表的基本操作有查找、插入、删除等操作。顺序表由于具有随机存储 的特点,所以查找比较方便,效率很高,但插入和删除数据元素都需要移动大量 的数据元素,所以效率很低。而链表由于其存储空间不要求是连续的,所以插入 和删除数据元素的效率很高,但查找需要从头引用开始遍历链表,所以效率很低。 因此,线性表采用何种存储结构取决于实际问题,如果只是进行查找等操作而不 经常插入和删除线性表中的数据元素,则线性表采用顺序存储结构;反之,采用 链式存储结构。

栈、队列、堆

标签:

原文地址:http://www.cnblogs.com/wangweiabcd/p/4197995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!