【无标题】
作者:互联网
堆的结构分析
需要注意的是堆是一种数据结构,与操作系统的堆区没有关系。
堆的结构:堆是完全二叉树,从左到右是连续的,适合用数组存储
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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;
}
源代码
堆的经典应用
标签:E5%,9E%,E6%,E7%,84%,无标题,节点 来源: https://blog.csdn.net/weixin_46016019/article/details/123028128