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

数据结构之队列

时间:2016-05-08 10:26:40      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

队列和栈类似,不过与栈要求在同一端添加和删除数据项不同,是先进先出,和生活中排队一样

常用的操作有

入队(enqueue)

出队(dequeue)

 

队列的应用:

图的广度优先搜索算法;

优先队列(Priority Queue),此队列是取出元素时根据所存元素的某个特征值或优先权

操作系统的工作调度,如果工作优先权相同,则采用先到先做的原则

用于spooling,现将数据写到磁盘,再由打印机把先存入的数据输出

 

 

队列看起来简单,但是实际上隐藏了许多微妙的细节。

首先是内存表示问题,一般使用数组或者链表来表示队列

如果保持在队尾添加元素并从队头删除元素,队列的数据结构将在内存中缓慢迁移,单纯使用数组效率并不高,比如头指针到达队尾了。

如果使用数据,可以用数组循环来避免这个问题,循环缓冲区(circular buffer),环状队列。

如果使用链表,在队列中删除和添加节点,当分配和释放节点时会使得可用内存碎片化。

解决方法:

1、自己是用函数创建节点池

2、创建一个未使用节点的链表,当把项目添加到队列中时,就把节点从空闲的链表移到队列中,当项目出队时,就把节点返回到空闲列表中。

 

双向队列

输入限制性双向队列

输出限制性双向队列

 

环状队列的实现还要再理解一下。

数据结构之队列

标签:

原文地址:http://www.cnblogs.com/tuhooo/p/5469781.html

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