定义:普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。
优先队列是0个或多个元素的集合,每个元素都有一个优先权或值, 以队列形式存放数据,因此只允许底端加入数据,顶端取出数据,数据的排列按照优先权或值的大小排列。需要实现以下操作:
1、 查找:找出队列中最小或最大元素。
2、 删除:删除队列中最大或最小元素。
3、 插入:插入新元素到队列中。
4、 查看:查看整个队列的所有数据。
5、 实现以上操作后的队列,仍然要为最小或最大优先队列。
优先队列分为最小优先队列和最大优先队列。在最小优先队列(min priority queue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。优先权队列中的元素可以有相同的优先权,查找与删除操作可根据任意优先权进行。
算法优缺点:
优点:
1、时间复杂度小,排序稳定
2、算法思想简单易于理解编写
3、合理地利用数据数组类型的特点
4、算法主要采用板块化函数设计,相互独立,减少了个别错误影响整个系统稳定的问题。
缺点:
每次删除、查找、插入操作都必须重新进行一次堆排序