队列:是一种满足先进先出(FIFO)的数据结构,数据从队列头部取出,新的数据从队列尾部插入,数据之间是平等的,不存在优先级的。
优先队列:优先级队列有两种,最大优先级队列和最小优先级队列,这两种类别分别可以用最大堆和最小堆实现。
优先队列支持的操作:
INSERT(S,x):把元素x插入到集合S
MAXIMUM(S):返回S中具有最大关键字的元素
EXTRACT_MAX(S):去掉并返回S中的具有最大关键字的元素
INCREASE_KEY(S,x,k):将元素x的关键字的值增加到k,这里k值不能小于x的原关键字的值。
最大优先级队列操作实现:
采用最大堆实现最大优先级队列,关于最大堆可以参见上一篇日志http://blog.csdn.net/chenxun_2010/article/details/48213197
(1)HEAP_MAXIMUM用O(1)时间实现MAXIMUM(S)操作,即返回最大堆第一个元素的值即可(return A[1])
(2)HEAP_EXTRACT_MAX实现EXTRACT_MAX操作,删除最大堆中第一个元素,然后调整堆
操作过程如下:将最堆中最后一个元素复制到第一个位置,删除最后一个节点(将堆的大小减少1),然后从第一个节点位置开始调整堆,使得称为新的最大堆。操作过程如下图所示: