【无标题】

堆的结构分析

需要注意的是堆是一种数据结构,与操作系统的堆区没有关系。

堆的结构:堆是完全二叉树,从左到右是连续的,适合用数组存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXPFbfhG-1645325642196)(D:%5C%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99%5CMarkdown%5C%E7%AC%94%E8%AE%B0%5CData%20Struct%5C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%5Cimage-20220113094926420.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v7pQHE8I-1645325642199)(%E5%A0%86%E7%9A%84%E7%BB%93%E6%9E%84%E5%88%86%E6%9E%90/1.drawio-1645324696910.png)]

堆是一颗完全二叉树,分为大堆和小堆

大堆:一个树中,任何父亲节点都大于等于孩子节点,所以大堆的根节点最大

小堆:一个树中,任何父亲节点都小于等于孩子节点,所以小堆的根节点最小

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cxLIxcF3-1645325642200)(%E5%A0%86%E7%9A%84%E7%BB%93%E6%9E%84%E5%88%86%E6%9E%90/1.drawio-1645324895212.png)]

堆的实现

了解过顺序表的小伙伴,对堆的实现就非常简单了。因为要满足大堆或小堆,需要用到向上调整和向下调整算法

存储结构

typedef int HPDataType;

//实现大堆
typedef struct Heap
{
	HPDataType* p;
	int size;//节点个数
	int capacity;//空间容量
}HP;

初始化

//首先将创建结构体对象,将对象地址传给HeapInit函数进行初始化
void HeapInit(HP* pc)
{	
	assert(pc);
	pc->capacity = pc->size = 0;
	pc->p = NULL;
}

源代码

堆的经典应用

上一篇:我提交了一个 pr,竟然是为了吃


下一篇:linux下的文件分析工具 -- nm