一、何为小根堆?小根堆是一种数据结构,是一种完全二叉树,类似对应的还有大根堆,如下:
小根堆适用于每次取出最小值,所以每次都可以通过取堆顶的方式来获取最小值,获取最小值后,并且进行移除,则次小值将会排在堆顶,大根堆则相反。
小根堆规则:
1.父节点的值小于或等于子节点的值
2.i结点的父结点下标为(i–1)/2
3.左右子结点下标分别为2 * i + 1和2 * i + 2
二、举例:
min_heap_t中的元素p表示元素的二级指针,n表示小根堆里有几个元素,a表示p指向的内存的大小,在min_heap_reserve函数申请了一定数量的内存,初始化为8个(event *)指针,a就等于8,但是元素不一定是8,当元素超过8时会继续申请的。
typedef struct min_heap
{
struct event** p; /* p:元素类型 */
unsigned n, a; /* n:元素个数,a: p指向的内存的尺寸*/
} min_heap_t;
int min_heap_reserve(min_heap_t* s