标签:
队列和栈类似,不过与栈要求在同一端添加和删除数据项不同,是先进先出,和生活中排队一样
常用的操作有
入队(enqueue)
出队(dequeue)
队列的应用:
图的广度优先搜索算法;
优先队列(Priority Queue),此队列是取出元素时根据所存元素的某个特征值或优先权
操作系统的工作调度,如果工作优先权相同,则采用先到先做的原则
用于spooling,现将数据写到磁盘,再由打印机把先存入的数据输出
队列看起来简单,但是实际上隐藏了许多微妙的细节。
首先是内存表示问题,一般使用数组或者链表来表示队列
如果保持在队尾添加元素并从队头删除元素,队列的数据结构将在内存中缓慢迁移,单纯使用数组效率并不高,比如头指针到达队尾了。
如果使用数据,可以用数组循环来避免这个问题,循环缓冲区(circular buffer),环状队列。
如果使用链表,在队列中删除和添加节点,当分配和释放节点时会使得可用内存碎片化。
解决方法:
1、自己是用函数创建节点池
2、创建一个未使用节点的链表,当把项目添加到队列中时,就把节点从空闲的链表移到队列中,当项目出队时,就把节点返回到空闲列表中。
双向队列
输入限制性双向队列
输出限制性双向队列
环状队列的实现还要再理解一下。
标签:
原文地址:http://www.cnblogs.com/tuhooo/p/5469781.html