前面我们讲到栈和队列的时候,这两种数据结构都是按时间的先后顺序来排列,如栈是按先进后出(FILO),后入先出的原则排列。而队列是按先进先出(FIFO)的原则排序。但有时候按这种时间原则的数据结构不能满足用户的一些需求,例如CPU需要执行程序的优先级别,很多时候不能靠时间顺序,有些程序重要性更高的时候,应该优先被调用,所以应该用一种按优先级高低来排列的数据结构,数据结构中的每一个对象都有各自的优先级,我们从这个结构序列中取出元素的原则是按优先级的高低来取出,而不是进入队列的先后顺序。这里就要用到一种数据结构:堆。如果我们要用二叉搜索树来实现堆这一结构,怎么做?
这里举例用最大堆,最大堆的二叉搜索树结构是,从根结点开始,每一个结点的优先级都比它的左右子树高。这样来实现的话,我们可以把二叉搜索树用一种平衡的,排好序的结构来存储从而提高后面操作的效率,那就是用完全二叉树。
堆最重要的特点就是结构有序性。用完全二叉树的结构,有序性分两种,一种是最大堆,也就是从根结点开始,任一结点的元素优先级都比它的左右子树高。第二种是最小堆,也就是从根结点开始,任一结点的元素优先级都比它的左右子树低。