一、堆的定义

堆也被称为优先队列,在堆底插入元素,在堆顶取出元素,但是堆中元素的排列不是按照到来的先后顺序,而是按照一定的优先顺序排列的。根据优先顺序的不同,可将堆分为大根堆小根堆

大根堆:根结点的值是所有堆结点值中的最大值,每个根结点的值均大于它的左孩子和右孩子(图一就是一个大根堆)

小根堆:根结点的值是所有堆结点值中的最小值,每个根结点的值均小于它的左孩子和右孩子(图二就是一个小根堆)

 

         图一                    图二

二、堆的存储

  堆可以看成一个二叉树,所以可以考虑使用二叉树的表示方法来表示堆。但是因为堆中元素按照一定的优先顺序排列,因此使用数组来表示更简便,还可以节省子节点指针空间,并且可以快速访问每个节点。