C语言 数据结构堆

it2025-05-02  11

一、堆的概念及结构 1、堆的概念: 如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。 2、堆的性质: a. 堆中某个节点的值总是不大于或不小于其父节点的值; b. 堆总是一棵完全二叉树。

3、堆的实现 向下调整法:现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆。向下调整算法有一个前提:左右子树必须是一个堆,才能调整。

4、堆的删除 删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。 5、堆的代码实现

typedef int HPDataType; typedef struct Heap { HPDataType* _a; int _size; int _capacity; }Heap; void HeapInit(Heap* hp, HPDataType* a, int n); void HeapDestory(Heap* hp); void HeapPush(Heap* hp, HPDataType x); void HeapPop(Heap* hp); HPDataType HeapTop(Heap* hp); int HeapSize(Heap* hp); int HeapEmpty(Heap* hp);
最新回复(0)