Skip to content

Latest commit

 

History

History
35 lines (25 loc) · 1.04 KB

数据结构之堆.md

File metadata and controls

35 lines (25 loc) · 1.04 KB

数据结构之堆

介绍

堆(heap)又被为优先队列(priority queue)。尽管名为优先队列,但堆并不是队列。 因为队列中允许的操作是先进先出(FIFO),在队尾插入元素,在队头取出元素。 而堆虽然在堆底插入元素,在堆顶取出元素,但是堆中元素的排列不是按照到来的先后顺序,而是按照一定的优先顺序排列的。

本文着重讲解最大堆,最小堆以及堆排序

实现

堆的一个经典的实现是完全二叉树(complete binary tree),这样实现的堆称为二叉堆(binary heap)。

满二叉树:除了叶子节点,所有的节点的左右孩子都不为空,就是一棵满二叉树,如下:

     7
    /  \
  2     5
 / \   / \
13 24 12 56

完全二叉树:不一定是一个满二叉树,但它不满的那部分一定在右下侧,如下

     7
    /  \
  2     5
 / \   /
13 24 12

堆的特性: 必须是完全二叉树;任一结点的值是其子树所有结点的最大值或最小值