【数据结构】堆(Heap)详解----定义堆、初始化,删除、插入、销毁、判空、取堆顶

【数据结构】堆(Heap)详解----定义堆、初始化,删除、插入、销毁、判空、取堆顶

文章目录

一、堆的概念及其性质:

堆的概念:

堆的性质:

二、堆的定义及其基础操作的代码实现(C语言版)

1.定义堆

2.堆的初始化

3.堆的销毁

4.堆的插入

5.堆的删除

6.取堆顶的数据

7.堆的数据个数

8.堆的判空

总结:

提示:以下是本篇文章正文内容

一、堆的概念及其性质:

堆的概念:

堆:是一种特殊的完全二叉树,使用数组进行存储,其所有的父结点大于等于或者小于等于它们的子结点,所以堆分为大根堆和小根堆。 大根堆(最大堆)::所有的父结点大于等于它们的子结点,堆顶是最大值。 小根堆(最小堆)::所有的父结点小于等于它们的子结点,堆顶是最小值。 举例:

堆的性质:

对于具有n个结点的完全二叉树,若按照从上至下,丛左至右的数组顺序对所有结点从0开始编号,则对于序号为i的节点: 1.若i=0,i为根节点编号,无双亲结点。 2.若i>0,i位置结点的双亲序号:(i-1)/2; 3.若2i+1

二、堆的定义及其基础操作的代码实现(C语言版)

因为堆的定义以及销毁、初始化很简单,就不赘述啦,直接看代码。难点主要在于堆的插入和删除,我们会用到两种方法向上调整法和向下调整法,我会详细讲述。

1.定义堆

typedef int HPDataType;

typedef struct Heap

{

HPDataType* _arr;

int _size;//有效数据个数

int _capacity;//空间大小

}Heap;

2.堆的初始化

void HeapInit(Heap* hp)

{

assert(hp);

hp->_arr = NULL;

hp->_capacity = hp->_size = 0;

}

3.堆的销毁

void HeapDestory(Heap* hp)

{

assert(hp);

if(hp->_arr) free(hp->_arr);

hp->_arr = NULL;

hp->_capacity = hp->_size = 0;

}

相关推荐

苹果设备如何下载ed2k文件
365bet娱乐场网站

苹果设备如何下载ed2k文件

📅 08-12 ⭐ 3576
饥荒铥矿百科图鉴 《饥荒联机版》铥矿详细攻略及获取方法
微信点对点怎么发消息
365bet体育开户

微信点对点怎么发消息

📅 08-29 ⭐ 1641
csol哪个区人最多
365bet体育开户

csol哪个区人最多

📅 08-12 ⭐ 7890
《射雕英雄传》中昆仑派内功心法的修炼途径探析
365买球平台下载

《射雕英雄传》中昆仑派内功心法的修炼途径探析

📅 07-14 ⭐ 9068
一口爱上的山东大煎饼💗——改良创新版✨
365买球平台下载

一口爱上的山东大煎饼💗——改良创新版✨

📅 08-20 ⭐ 5170
推荐阅读 ❤️