c/c++实现一个基本的最大堆

本文介绍了堆的特性,包括每个节点最多有两个子节点,根节点的键值大于所有节点,以及堆的数组表示法。重点讲解了堆的基本实现。
摘要由CSDN通过智能技术生成

 堆的特性

1.每个节点最多可以有两个节点

2.根节点的键值是所有堆节点键值中最大者,且每个结点的值都比其孩子的值大

3.除了根节点没有兄弟节点,最后一个左子节点可以没有兄弟节点,其他节点必须有兄弟节点

堆是你见过的最有个性的树!它是用数组表示的树

 堆的基本实现

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

#define DEFAULT_CAPCITY 128

typedef struct heap
{
	int* arr;	//储存元素的数组
	int size;	//当前已储存的元素个数
	int capacity; //当前储存的容量

}Heap;

//初始化堆
bool initHeap(Heap& heap, int* orginal, int size);
//建堆
static void buildHeap(Heap& heap);
//将当前的节点和叶子节点调成最大堆
static void adjustDown(Heap& heap, int index);

bool initHeap(Heap& heap, int* orginal, int size)
{
	int capacity = DEFAULT_CAPCITY > size ? DEFAULT_CAPCITY :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值