前言
譬如打印机打印作业的操作,一般是放到队列中,按照先后的顺序来,但是总有一些操作时间的短的,如果排的比较靠后,也要等好长时间,我们希望这些花费时间短的能够优先操作,这就需要队列特殊的处理,我们称为优先队列(priority quenue)。
我们将讨论:
- 优先队列ADT的有效实现
- 优先队列的使用‘
- 优先队列的高级实现
1. 二叉堆
二叉堆的使用对于优先队列的实现相当普遍,像二叉树一样,它也有两个性质,结构性质和堆序性质。
1.1 结构性质
- 一棵被完全填满的二叉树,即完全二叉树;
- 高为 h的树,有 2 h 2^h 2h 到 2 k + 1 − 1 2^{k+1}-1 2k+1−1 个节点;
- 深度为 O ( l o g N ) O(logN) O(logN);
- 可以用数组表示,从数组下标 1 开始,对于数组上任意 位置