Binary Heap(二叉堆)

Binary Heap (二叉堆)


1. 二叉堆的定义

  在计算机科学中,二叉堆二叉树形状的堆结构。二叉堆是最常见的实现优先级队列的方法,它与优先级队列紧密相连,一起应用到诸多地方,在很多主流语言的标准算法库中都能看到它们的身影。同时它也是很多算法中需要用到的底层数据结构,能够快速地掌握这些已有的标准库和类,能够很高效地实现诸多算法。

  • 其空间复杂度和相关操作的时间复杂度如下表所示:

Algorithm Average Worst Case
Space O(n) O(n)
Search O(n) O(n)
Insert O(1) O(log n)
Delete O(log n) O(log n)
Peek O(1) O(1)

2. 二叉堆的性质

  二叉堆的是一个具有堆性质的完全二叉树,因此二叉堆具备了完全二叉树和堆的全部特性,实现起来非常容易,也是程序员必须要掌握的基本数据结构。

  • 最大堆示例
    最大堆示例

  • 完全二叉树: 完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。只有最下面的两层结点度能够小于2,并且最下面一层的结点都集中在该层最左边的若干位置。完全二叉树是一种效率很高的数据结构,通常采用数组形式存储,可以快速计算出一个节点的父子节点,同时不需要额外存储索引信息。

  • 堆性质: 堆性质是指树中的任意节点的取值,均比其字节点的取值大,称为最大堆。(或小,称为最小堆)这个是基于二叉堆获得节点取值对应关系的重要依据,是体现优先级的地方。


3. C语言实现二叉堆的基本操作(指针操作)

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值