前面我们学习了线性结构的栈, 今天我们来学习一种非线性结构-堆
堆的定义
堆是一种非线性结构,可以把堆看作一棵二叉树, 堆的存储可以使用数组来存放!
堆的分类
堆可以分为大顶堆和小顶堆。 大顶堆: 每个结点的值都大于或等于其左右孩子结点的值。 小顶堆: 每个结点的值都小于或等于其左右孩子结点的值。
这节课,我们先来看小顶堆!
小顶堆示意图
堆数组存放的公式
我们用简单的公式来描述一下堆的定义就是:
大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]
小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]
所以上面的小顶堆变成数组存放就是:
下面就来看看小顶堆的C语言实现: