学习堆之前先了解一下优先队列

1. 优先队列的定义

优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是 依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。

2. 优先队列的实现

可以采用数组或者链表实现,但是效率不怎么好

采用完全二叉树结构组织数据实现优先队列

3. 堆和优先队列的关系

优先队列的实现有很多方法,堆只是其中一种

4. 堆的特性

结构性:用数组表示的完全二叉树

有序性:任一结点的关键字是其子树所有结点的最大值(或最小值)

  • 最大堆(MaxHeap),也称 大顶堆:最大值

  • 最小堆(MinHeap),也称 小顶堆:最小值

5. 堆的抽象数据类型描述

类型名称:最大堆( MaxHeapMaxHeap

数据对象集:完全二叉树,每个结点的元素值 不小于 其子结点的元素值

操作集:最大堆 HMaxHeapH \in MaxHeap ,元素 itemElementTypeitem \in ElementType ,主要操作有:

  • MaxHeap Create(int MaxSize):创建一个空的最大堆;

  • Boolean IsFull(MaxHeap H):判断最大堆 HH 是否已满;

  • void Insert(MaxHeap H, ElementType item):将元素 itemitem 插入最大堆 HH

  • Boolean IsEmpty(MaxHeap H):判断最大堆 HH 是否为空;

  • ElementType DeleteMax(MaxHeap H):删除并返回 HH 中最大元素(高优先级)。

6. 最大堆的操作

最后更新于

这有帮助吗?