二叉树---堆的现实

目录

一、头文件的声明

二、功能函数的实现

void Swap(HPDateType* pa, HPDateType* pb);

void HPInit(HP* php);

void HPDestory(HP* php)

bool HPEmpty(HP* php)

void AdjustUP(HPDateType* a, int child)

void AdjustDown(HPDateType* a, int n, int parent)

void HPPush(HP* php, HPDateType x)    

void HPPop(HP* php)

int HPSize(HP* php)

HPDateType HPTop(HP* php)

三、注意点


一、头文件的声明

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>typedef int HPDateType;typedef struct heap
{int size;int capacity;HPDateType* a;
}HP;void Swap(HPDateType* pa, HPDateType* pb);//固定void HPInit(HP* php);
void HPDestory(HP* php);
bool HPEmpty(HP* php);//算法void AdjustUP(HPDateType* a, int child);
void AdjustDown(HPDateType* a, int n, int parent);//Push、Popvoid HPPush(HP* php, HPDateType x);
void HPPop(HP* php);//特殊元素int HPSize(HP* php);
HPDateType HPTop(HP* php);

二、功能函数的实现

void Swap(HPDateType* pa, HPDateType* pb);
 


void Swap(HPDateType* pa, HPDateType* pb)
{assert(pa);HPDateType tmp = *pa;*pa = *pb;*pb = tmp;
}

void HPInit(HP* php);

void HPInit(HP* php)
{assert(php);		//别忘了assertphp->a = NULL;php->capacity = 0;php->size = 0;
}

void HPDestory(HP* php)
 

void HPDestory(HP* php)
{assert(php);free(php->a);php->a = NULL;php->capacity = 0;php->size = 0;
}

bool HPEmpty(HP* php)
 


bool HPEmpty(HP* php)
{assert(php);return php->size == 0;
}

void AdjustUP(HPDateType* a, int child)
 

void AdjustUP(HPDateType* a, int child)
{assert(a);int parent = (child - 1) / 2;while (child > 0){if (parent > 0 && a[child] < a[parent]){Swap(&a[child], &a[parent]);//迭代child = parent;parent = (child - 1) / 2;}elsebreak;}}

void AdjustDown(HPDateType* a, int n, int parent)
 


void AdjustDown(HPDateType* a, int n, int parent)
{assert(a);//建大堆:假设左孩子大int child = parent * 2 + 1;			//先× 2,再 + 1while (child < n)		//n是大小,不是下标{//向下调整需要找大孩子if (child + 1 < n&& a[child + 1] < a[child]){child++;	//变成右孩子}if (a[child] < a[parent]){Swap(&a[child], &a[parent]);//在循环中,让parent与child不断迭代parent = child;child = parent * 2 + 1;}elsebreak;}
}

void HPPush(HP* php, HPDateType x)    

1.判断是否满          ------              开辟空间

开辟完成之后,需要capacity更新,空间更新

	//void初始化,一级指针,没法开辟空间
{assert(php);//空间:都用reallocif (php->capacity == php->size){int newcapacity = php->capacity == 0 ? 4 : 2 * (php->capacity);HPDateType* tmp = (HPDateType*)realloc(php->a, sizeof(HPDateType) * newcapacity);if (tmp == NULL)	//判断是否开辟失败{perror("realloc fail");return;	}php->a = tmp;php->capacity = newcapacity;		//除了空火箭开辟,开需要对php->capacity进行修改}//size是结构元素 , php->size才合法php->a[php->size] = x;php->size++;AdjustUP(php->a, php->size - 1);		//size是结构元素 , php->size才合法}

void HPPop(HP* php)
 

1.头尾交换

2.删除数据

3.向下调整


void HPPop(HP* php)
{assert(php);assert(!HPEmpty(php));		//调用函数需要传参Swap(php->a, &php->a[php->size - 1]);php->size--;	//size是结构体成员AdjustDown(php->a, php->size, 0);		//php->size	需要传数组的大小
}

int HPSize(HP* php)
 


int HPSize(HP* php)
{assert(php);return php->size;
}

HPDateType HPTop(HP* php)
 


HPDateType HPTop(HP* php)
{assert(php);assert(!HPEmpty(php));		//内部调用函数,需要传参!!!return php->a[0];
}

三、注意点

需要注意的是,在函数内部调用HPEmpty函数时,需要传参!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; func isValid(s string) bool {n : len(s)if n % 2 1 {return false}pairs : map[byte]byte{): (,]: [,}: {,}stack : []byte{}for i : 0; i < n; i {if pairs[s[i]] > 0 {if len(stack) 0 || stack[len(stack)-1] ! pairs[s[i]] {…

【leetcode面试经典150题】36. 旋转图像(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

第04章 计算机常用通信指标和术语视频课程

4.1 本章目标 掌握bit、Byte、KB、MB、GB、TB概念和换算关系掌握波特率、比特率、误码率的概念掌握信道、基带信号、频带信号概念了解多路复用、频分多路复用、时分多路复用了解同步传输、异步传输概念 4.2 bit、Byte、KB、MB、GB、TB概念和换算关系 4.2.1 概念与换算 4.2.2…

MongoDB聚合运算符:$multiply

文章目录 语法举例 $multiply聚合运算符返回两个表达式相乘的结果&#xff0c;参数通过数组传递给 $multiply运算符。 语法 { $multiply: [ <expression1>, <expression2> ] }参数可以是任何有效的表达式&#xff0c;只要它们解析为数字即可。从MongoDB 6.1开始&…

docker-compose 之 OpenGauss

使用 docker 启动高斯数据库的示范脚本如下&#xff1a; docker-compose.yml version: 3.7 services:opengauss:image: enmotech/opengauss:5.1.0container_name: opengaussnetwork_mode: "host"privileged: truevolumes:- ./opengauss:/var/lib/opengaussenvironm…

使用自己的数据基于SWIFT微调Qwen-Audio-Chat模型

目录 使用自己的数据训练参数设置自己的数据准备语音转写任务语音分类任务 开始训练不同训练方法mpddpmp ddpdeepspeed 训练实例训练详情Qwen-Audio-Chat模型 模型数据实例官方可用的数据由内部函数处理为指定格式 训练好的模型测试 使用自己的数据 官方参考文档&#xff1a;…

CSPNet: A New Backbone that can Enhance Learning Capability of CNN

CSPNet 摘要1.引言3.方法3.1Cross Stage Partial NetworkDenseNetCross Stage Partial DenseNetPartial Dense BlockPartial Transition LayerApply CSPNet to Other Architectures 3.2 Exact Fusion ModelLooking Exactly to predict perfectlyAggregate Feature PyramidBalan…

【Android】【root remount】【3】remount 文件详细信息获取

前言 我们在root & remount 设备后&#xff0c;push相关文件到systm 、vendor、product 等目录进行调试&#xff0c;那么我们push的文件被保存在什么地方呢&#xff1f; 以及我们FWS、app侧如何过去push 的文件信息呢&#xff1f; remount push 文件保存 push 文件保存的…

java数据结构与算法刷题-----LeetCode684. 冗余连接

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 并查集 并查集 解题思路&#xff1a;时间复杂度O( n ∗ l o g 2…

C++ 中的运算符优先级

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级&#xff0c;比如&#xff0c;乘除运算符具有比加减运算符更高的优先级。 例如 x 7 3 * 2&#xff0c;x 被赋值为 13&#xff0c;而不是 20&#xff0c;因为运算符…

高质量数据赋能大模型应用落地,景联文科技提供海量AI大模型数据

随着人工智能技术的迅猛进步&#xff0c;AI算法持续创新突破&#xff0c;模型的复杂度不断攀升&#xff0c;呈现出爆炸性的增长态势。数据的重要性愈发凸显&#xff0c;已然成为AI大模型竞争的核心要素。 Dimensional Research的全球调研报告显示&#xff0c;72%的受访者认为&a…

01、ArcGIS For JavaScript 4.29对3DTiles数据的支持

综述 Cesium从1.99版本开始支持I3S服务的加载&#xff0c;到目前位置&#xff0c;已经支持I3S的倾斜模型、3D Object模型以及属性查询的支持。Cesium1.115又对I3S标准的Building数据实现了加载支持。而ArcGIS之前一直没有跨越对3DTiles数据的支持&#xff0c;所以在一些开发过…

【Qt】:对话框(一)

对话框 一.基本的对话框二.自定义对话框三.通过图形化界面自定义对话框四.关于对话框mode 对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口&#xff0c;出现在程序最上层&#xff0c;用于实现短期任务或者…

设计模式(014)行为型之迭代器模式

迭代器模式&#xff0c;用于提供一种方法来顺序访问一个聚合对象中的各个元素&#xff0c;而又不需暴露该对象的内部表示。它将遍历和聚合分离开来&#xff0c;使得可以独立地改变遍历方法而不影响聚合对象。这种模式通常包括一个迭代器接口定义和一个聚合对象接口定义&#xf…

【初学】前后端flask+vue组合GET案例

【CSDN 目录配置很不好用】 一、python配置 pip install flaskpip install flask-cors 二、vue配置 1.下载node.js 2.安装node.js 3.测试 node -v4.在vue项目文件夹中创建vue项目 npm create vue@latest第一次会安装一个东西,然后输入名称,一路回车 ✔ Project name…

读所罗门的密码笔记16_直通心智

1. 直通心智 1.1. 如今&#xff0c;科学家已经可以诱发触觉、压觉、痛觉和大约250种其他感觉 1.1.1. DARPA支持的触觉技术第一次让一位受伤的人能够用假肢和手指感知到被触碰的物体 1.1.2. 可以建立人工系统&#xff0c;来替换和弥补受损大脑的部分区域 1.1.3. 神经科学家能…

如何合理利用Vue 3中的ref和reactive

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

最近一些前端面试问题整理

最近一些前端面试问题整理 4月8号1. TS 中的 类型别名 和接口的区别是什么&#xff1f;2. 什么是深拷贝和浅拷贝&#xff1f;深浅拷贝的方法有哪些&#xff1f;浅拷贝&#xff08;Shallow Copy&#xff09;深拷贝&#xff08;Deep Copy&#xff09;区别总结 3. 使用 JSON.strin…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-看门狗【WDG】

硬件部分 一、看门狗简介 看门狗-WDG&#xff08;watchdog&#xff09; 看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入长时间的罢工状态…

三、Mat、Bitmap和Image数据类型之间的转换(OpenCvSharp)

在OpenCV中可以通过ImRead方法读取照片&#xff0c;通过ImShow方法显示照片&#xff1b;但是无法在PictureBox控件中显示 PictureBox控件只能展示Bitmap和Image数据类型图片 为此查阅了网上很多篇博文&#xff0c;将三种数据类型之间的转换进行了归纳整理&#xff0c;感谢网上…