堆是特殊的队列
从堆中取出元素是依照元素的优先级大小,而不是元素进入队列的先后顺序
堆最常用的结构是二叉树表示,不特指的话,它是一棵完全二叉树
因为高度为h的完全二叉树有结点2(h-1) 到2h-1个,且结点排布及其规律,因此,通常不必使用指针,而是用数组来实现堆的存储
堆中的元素在数组中是按完全二叉树的层序存储的(特别提醒:所用数组起始单元为1,而不是0)
这样做的目的是,很容易从子结点找到其父节点和左右结点
堆的两个特性:
- 堆的结构特性:用数组表示完全二叉树
- 堆的部分有序性:任意结点元素的数值与其子结点所存储的值是相关的
(相关性的不同决定了两种不同的基本堆:最小堆、最大堆)
最小堆 构建、插入、删除的过程图解:https://blog.csdn.net/hrn1216/article/details/51465270