【数据结构】二叉树-堆
创始人
2024-11-06 00:08:34
0

二叉树-堆


堆是一种特殊的二叉树,具有二叉树特性的同时,还具备其他特性。
堆一般使用顺序结构的数组来存储数据。

堆分为:

  • 小根堆
  • 大根堆

小根堆: 父节点的元素小于或等于左右子结点的元素。
大根堆: 父节点的元素大于或等于左右子节点的元素。

这里我们一大根堆为例。

//.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #include #include  typedef int HPDataType;  typedef struct Heap { 	HPDataType* arr; 	int size; 	int capacity; }HP;  void HPInit(HP*php);//堆初始化 void HPDestory(HP*php);//堆的销毁  void HPPush(HP*php,HPDataType x);//堆插入数据 void HPPop(HP*php);//出堆 bool HPEmpty(HP*php);//判断堆是否为空 HPDataType HPTop(HP*php);//获取堆顶元素 HPDataType HPSize(HP*php);//堆中数据个数  void AdjustDown(HPDataType* arr, int parent, int n); void AdjustUp(HPDataType* arr, int child); void Swap(int* x, int* y);  
//.c #include"Heap.h"  void HPInit(HP* php)//堆初始化 { 	assert(php); 	php->arr = NULL; 	php->capacity = php->size = 0; }  void HPDestory(HP* php)//堆的销毁 { 	assert(php); 	if (php->arr) 	{ 		free(php->arr); 	}   	php->arr = NULL; 	php->capacity = php->size = 0; }  void Swap(int*x,int*y) { 	int tmp = *x; 	*x = *y; 	*y = tmp; }  void AdjustUp(HPDataType*arr,int child)  { 	assert(arr); 	int parent = (child - 1) / 2; 	while (child>0) 	{ 		if (arr[child]>arr[parent]) 		{ 			Swap(&arr[parent],&arr[child]); 			child = parent; 			parent = (child-1)/2; 		} 		else 		{ 			break; 		} 	} }   void HPPush(HP* php, HPDataType x)//堆插入数据 { 	assert(php);  	if (php->capacity==php->size) 	{ 		int newnode = php->capacity == 0 ? 4 : 2 * php->capacity; 		HPDataType* tmp = (HPDataType*)realloc(php->arr,newnode*sizeof(HPDataType)); 		assert(tmp);  		php->arr = tmp; 		php->capacity = newnode; 	}  	php->arr[php->size] = x; 	AdjustUp(php->arr,php->size); 	php->size++; }  void AdjustDown(HPDataType*arr,int parent,int n) { 	assert(arr); 	int child = parent * 2 + 1; 	while (child 		if (child+1 			child++; 		} 		if (arr[child]>arr[parent]) 		{ 			Swap(&arr[child],&arr[parent]); 			parent = child; 			child = parent * 2 + 1; 		} 		else 		{ 			break; 		} 	} }   void HPPop(HP* php)//出堆 { 	assert(php&&php->size); 	Swap(&php->arr[0],&php->arr[php->size-1]); 	--php->size;  	AdjustDown(php->arr,0,php->size); }  bool HPEmpty(HP* php)//判断堆是否为空 { 	assert(php); 	return php->size == 0; }  HPDataType HPTop(HP* php)//获取堆顶元素 { 	assert(php); 	return php->arr[0]; }  HPDataType HPSize(HP* php)//堆中数据个数 { 	assert(php); 	return php->size; }  

相关内容

热门资讯

八分钟了解!newpoker怎... 八分钟了解!newpoker怎么安装脚本,哈糖大菠萝能开挂吗,指南书教程(有挂分析)1、哈糖大菠萝能...
方案辅助!微信小程序微乐破解器... 方案辅助!微信小程序微乐破解器2024!解谜真的是有辅助教程(有挂细节)1、进入到微信小程序微乐破解...
第9分钟了解!德普之星有辅助软... 第9分钟了解!德普之星有辅助软件吗,德州局透视脚本,步骤教程(有挂神器)运德普之星有辅助软件吗辅助工...
窍要辅助!洞庭茶苑app辅助!... 窍要辅助!洞庭茶苑app辅助!关于存在有辅助神器(有挂辅助)1.洞庭茶苑app辅助 选牌创建新账号,...
七分钟了解!wepoker怎么... 七分钟了解!wepoker怎么开辅助,wepoker透视脚本免费app,绝活儿教程(有挂细节)1、w...
窍要辅助!嘟咪互动有挂吗!开挂... 窍要辅助!嘟咪互动有挂吗!开挂是有辅助软件(有挂总结)窍要辅助!嘟咪互动有挂吗!开挂是有辅助软件(有...
1分钟了解!wepoker辅助... 1分钟了解!wepoker辅助器最新版本更新内容,德普之星私人局辅助免费,办法教程(有挂辅助)wep...
大纲辅助!心悦海南苹果版辅助器... 大纲辅助!心悦海南苹果版辅助器!关于是有辅助工具(有挂攻略)1、玩家可以在心悦海南苹果版辅助器线上大...
指南辅助!小程序广东雀神智能插... 指南辅助!小程序广东雀神智能插件安装下载!解谜真的是有辅助技巧(新版有挂)运小程序广东雀神智能插件安...
第九分钟了解!wepoker作... 第九分钟了解!wepoker作弊辅助,wpk辅助购买,步骤教程(新版有挂)1、完成wepoker作弊...