堆的建立及增删查改等操作

本文详细介绍了堆的建立、调整方法,包括向下调整法、建堆步骤,以及堆的增删查改操作的代码实现,如插入、删除等,通过示例和代码加深了对堆这一数据结构的理解。
摘要由CSDN通过智能技术生成

在这里插入图片描述


前言

本篇文章将带大家了解另一个数据结构的重要算法:的建立和基本操作实现。


一、堆调整-向下调整法

堆调整的思想:当给出一个完全二叉树时,且二叉树的左右子树都满足堆的特性且同为大堆或小堆,只有根节点不满足时。只需进行一次向下调整就可以把完全二叉树变成堆。

例:如下图所示除根结点外,左右子树均为小堆。此时只需要进行一次向下调整,就可以把原二叉树变成小堆。

image-20210531052439771

1.1向下调整的步骤

1.将根结点标记为父结点parent,将父结点的左孩子标记为child。

image-20210531052946445

2.如果父节点有右孩子,将左右孩子的数值进行比较。取较小的标记为child,并将parent和child结点交换

image-20210531053238941

3.将原来的child结点标记为parent,再将现在parent的左孩子标记为child,循环进行上面的操作,直到parent在叶子结点处位置。

image-20210531053614878

image-20210531053713221

二,建堆

现在如果想建一个堆,但是已经给出的完全二叉树的左右子树不满足堆的性质。所以此时,只运用一次向下调整法已经解决不了问题了。

此时解决问题的思路是:如果想想把树变成堆,就要先让树的子树变成堆;要让树的子树变成堆,就要让子树的子树先变成堆。按照这种思想,一层一层的从底层向上调整就能够解决问题。

2.1建堆步骤

  1. 先找到最后一个堆,再依次从后往前调整。以最后一个非叶子结点(即最后一个结点的双亲结点)为根节点的堆就是最后一个堆。

  2. 从后往前依次用向下调整法调整

三,建堆以及,堆的增删查改操作的代码实现

1.首先定义堆的结构体

在这里我们用一个数组来存放堆。

capacity是数组的容量,size是数组中存放的堆的元素个数

typedef int DataType;

typedef struct Heap
{
	DataType* array;
	DataType capacity;
	DataType size;
}Heap;

2.实现堆的初始化

void HeapInit(Heap* hp, DataType* array, DataType size)
{
	int LastNotLeaf = 0;
	assert(hp);
	hp->array = (DataType*)malloc(sizeof(DataType) * size);
	if (N
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值