1、堆简介
队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,按照优先级出队。一般出队列时,可能需要优先级高的元素先出队列,该场景下,使用队列不合适。
在这种情况下,数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象,这种数据结构就是优先级队列(Priority Queue)。
堆是一种特殊的数据结构,它是一棵完全二叉树,
完全二叉树,缺失节点在整棵树的右下侧。
把所有的元素按照完全二叉树的结构,按照层序遍历的顺序储存在一维数组中,如果该二叉树满足父节点小于等于子节点,叫做最小堆(小根堆);如果该二叉树满足父节点大于等于子节点,叫做最大堆(大根堆)。
根据堆的定义我们不难