目录
堆的初始化:void HeapCreat(Heap* hp)
堆插入:void HeapPush(Heap* hp, HDType x)
取堆顶数据:HDType HeapTop(Heap* hp)
堆的数据的个数:int HeapSize(Heap* hp)
堆的销毁:void HeapDistroy(Heap* hp)
二叉树一般可以使用两种存储结构,一种是顺序结构,一种是链式结构。
今天我们一起看一看顺序结构。
1. 顺序存储
顺序结构存储就是使用数组来存储,一般使用数值只适合表示完全二叉树,因为如果不是完全二叉树就会有空间的浪费。而在现实的使用中只有堆才会使用数组储存。二叉树顺序存储在物理上是一个数组,在逻辑上是一棵树。
可以看的在非完全二叉树的顺序结构中存在空间的浪费。
在数据结构中我们在堆(一种二叉树结构)中使用顺序结构的数组来储存。需要注意的是这里的堆是数据结构中的一种结构,与操作系统中的堆不同。下面一起看看堆吧!!!
堆分为小根堆和大根堆;根节点始终小于子节点称为小根堆,相反根节点始终大于子节点则称为大根堆。
堆的性质:1.堆中某个节点的值总是不大于或者不小于其父节点的值
2.堆总是一颗完全二叉树。
2.堆的实现:
节点结构:
因为是顺序结构,节点的结构和顺序表的一样。
typedef int HDType;
typedef struct Heap
{
int size;
int capacity;
HDType* data;
}Heap;
堆的初始化:void HeapCreat(Heap* hp)
堆的初始化就是将创建的堆的变量进行置空和置零
//堆的创建
void HeapCreat(Heap* hp)
{
assert(hp);
hp->data = NULL;
hp->capacity = 0;
hp->size = 0;
}