数据结构--树(下) 堆、哈夫曼树、哈夫曼编码、并查集
堆(heap) 讲线性结构队列中有提到一种队列叫优先队列(Priority Queue),取出元素是依照元素的优先权大小,而不是元素进入队列的优先顺序。 如何组织优先队列? 我们用完全二叉树去表示优先队列,任一结点都是其子树的最大值/最小值,这就叫堆,堆分为大顶堆和小顶堆,从名字也可看出,大顶对对应的结点顶部为最大值,小顶堆同理。 大顶堆 : 小顶堆 : 堆的两个特性 结构性:用数组表示的完全二叉树 有序性:任一结点的关键字是其子树所有结点的最大值/最小值 堆的抽象数据类型描述 类型名称:最大堆 数据对象集:完美二叉树,每个结点的元素值不小于其他子结点的元素值 操作集: •MaxHeap Create( int MaxSize ):创建一个空的最大堆。 •Boolean IsFull( MaxHeap H ):判断最大堆H是否已满。 •Insert( MaxHeap H, ElementType item ):将元素item插入最大堆H。 •Boolean IsEmpty( MaxHeap H ):判断最大堆H是否为空。 •ElementType DeleteMax( MaxHeap H ):返回H中最大元素(高优先级)。 堆结构 : typedef struct heapsturct { ElementType * Elements ; //0位置存放一个值为无穷大的哨兵