初阶数据结构之堆讲解

本篇文章带大家学习的是堆,还请各位观众老爷给个三连

正片开始

堆的概念

如果有一个关键码的集合 K = { , , ,
} ,把它的所有元素按完全二叉树的顺序存储方式存储
在一个一维数组中,并满足: <=
<=
( >=
>=
) i = 0 1
2… ,则称为小堆 ( 或大堆 ) 。将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。
要点提炼:根节点最大,则叫大堆,根节点最小则叫小堆

堆的性质

堆中某个结点的值总是不大于或不小于其父结点的值;

堆总是一棵完全二叉树。

要点提炼:小堆时大于根节点,反之则小于根节点,是完全二叉树

堆实现

创建堆

在堆的头文件中创建结构体,且结构体内包含数组,长度,空间元素。初始化时长度和空间置为0数组指针置为空

销毁堆

先声明结构体指针不为空,free掉数组,并还原回初始化时的状态

堆插入

先判断空间是否充足,充足则存放数据,反之则增加空间

堆删除

 声明结构体指针不为空,且长度>0,交换下标为0和下标为size-1的数据,最后长度减一。

向下/上调整

先插入到堆尾,再根据堆的性质进行向上或向下调整

那么堆的实现就先讲到这里,那么源代码我给大家放在下面了,大家可以参考一下

那么堆就先给大家讲到这里,我们下次再见

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

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

相关文章

【Redis】主从复制

https://www.bilibili.com/video/BV1cr4y1671t?p101 https://blog.csdn.net/weixin_54232666/article/details/128825763 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redist的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 主从搭建 这…

访客(UV)、点击量(PV)、IP、访问量(VV)概念

1、https://www.cnblogs.com/QingPingZm/articles/13855808.htmlhttps://www.cnblogs.com/QingPingZm/articles/13855808.html

SAAS多租户系统的详细设计方案,后台数据库及各类框架详细设计方案-程序员必被的技术

SAAS多租户系统的详细设计方案 多租户&#xff08;Multi-Tenant&#xff09;架构是一种在单个软件实例中服务多个客户&#xff08;租户&#xff09;的设计方式。每个租户的数据和配置是独立的&#xff0c;但共享同一个应用程序和基础设施。设计一个高效的SAAS多租户系统需要考…

监控电脑的软件有哪些?精选8大监控电脑的软件

根据当前市场反馈和功能评价&#xff0c;以下是八款备受推崇的电脑监控软件推荐&#xff0c;适合不同企业和组织的监控与管理需求&#xff1a; 1.安企神监控软件 特点&#xff1a;全面的局域网监控工具&#xff0c;擅长网络设备监控、网络性能管理和故障诊断。提供员工电脑屏幕…

配置Eclipse的C++环境

配置Eclipse的C环境主要包括以下几个步骤&#xff0c;以下是详细的步骤和说明&#xff1a; 1. 下载和安装JDK&#xff08;如果尚未安装&#xff09; JDK&#xff08;Java Development Kit&#xff09;是Eclipse运行的基础&#xff0c;如果尚未安装JDK&#xff0c;请从Oracle官…

计算机网络:408考研|湖科大教书匠|原理参考模型II|学习笔记

系列目录 计算机网络总纲领 计算机网络特殊考点 计算机网络原理参考模型I 计算机网络原理参考模型II 目录 系列目录更新日志前言应用层(Application Layer)一、应用层概述二、客户/服务器方式和对等方式三、动态主机配置协议(DHCP, Dynamic Host Configuration Protocol)四、域…

最优化方法Python计算:线性规划的标准化

目标函数和约束函数均为线性函数的最优化问题 { minimize c ⊤ x s.t. A i q x ≤ b i q A e q x b e q x ≥ o ( 1 ) \begin{cases} \text{minimize}\quad\quad\boldsymbol{c}^\top\boldsymbol{x}\\ \text{s.t.\ \ }\quad\quad\boldsymbol{A}_{iq}\boldsymbol{x}\leq\bold…

微机原理与接口技术:重点内容|计算机系统|学习笔记

系列目录 前言 只将最重要的知识点考点列出来方便学习复习 目录 系列目录前言第1章 微型计算机概述第2章 16位和32位微处理机&#x1f31f;16位微处理器 8086 第3章 Pentium 的指令系统常用指令 第4章 存储器、存储管理和高速缓存技术第5章 微型计算机和外设的数据传输第6章 串…

Socket网络编程基础教程

Socket网络编程基础教程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中的Socket网络编程&#xff0c;这是实现网络通信的重要基础。 …

echarts进度环叠加背景图

vue组件实现&#xff1a; <template><div class"ringWrap" :style"{transform:scale(${scale})}"><!-- 圆环 --><div :id"chartId" :style"{width:220px,height:220px,transform:scale(${scale})}"></div…

一个适用于标准普通 WordPress 博客站点的 CloudFlare 缓存规则

长期以来很多 WordPress 站长们都以为 WordPress 这样的动态博客网站系统的 CDN 缓存效果是有限的,尤其是 WordPress 伪静态后的.html 是无法被 CDN 完美缓存的。其实这个是跟你的博客网站架构有关系,如果你的 WordPress 网站用的是单用户模式(就是只需要网站管理员登录,不…

【JavaScript】var, let, const区别

提出 var是ES5提出的&#xff0c;let和const是ES6提出的。 作用域不同 let和const具有块级作用域&#xff0c;var不存在块级作用域,可以跨块访问, 不能跨函数访问 // 全局 var a 10 console.log(a) // 10const test (c) > {var b 20console.log(b) // 20&#xff0c;…

[单master节点k8s部署]13.statefulSet

statefulSet 为每一个pod提供一个稳定的、唯一的网络标识符&#xff0c;每个 Pod 通过 PersistentVolumeClaim (PVC) 获得自己的存储。即使 Pod 被重新调度到另一个节点&#xff0c;这个 PVC 也会被重新挂载到正确的 Pod 上&#xff0c;保证存储的稳定性。 statefulset创建的p…

LeetCode-213. 打家劫舍 II【数组 动态规划】

LeetCode-213. 打家劫舍 II【数组 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;分三种情况&#xff0c;一&#xff1a;不考虑头尾&#xff1b;二&#xff1a;考虑头不考虑尾&#xff1b;三&#xff1a;考虑尾不考虑头。解题思路二&#xff1a;优化空间解题思路三&am…

Android笔记-adb keycode大全

使用方法 用adb发送按键事件时&#xff0c;可以使用下面表中的枚举值或者直接使用数值&#xff0c;比如 adb shell input keyevent KEYCODE_HOME 或者 adb shell input keyevent 3 下面按三种排序方法列出所有按键的 keycode&#xff0c; 分别是&#xff1a; 按功能分 按枚…

C++ 设计模式之命令模式

C 设计模式之命令模式 简介 1、命令模式 &#xff08;Command&#xff09;是一种行为型设计模式&#xff0c;它将一个请求封装为一个对象&#xff0c;从而使您可以用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 2、…

浏览器userAgent大全及JS判断当前APP

文章目录 userAgent 检测PC/Mobile 浏览器 userAgent 大全Mobile APP userAgent 大全JS 判断当前 APP userAgent 检测 https://useragent.buyaocha.com/ PC/Mobile 浏览器 userAgent 大全 系统浏览器User-Agent字符串MacChromeMozilla/5.0 (Macintosh; Intel Mac OS X 10_12…

vue数组套对象,在动态加入属性:属性值, 导致数据不更新

一 、案例效果 [{a: 1,b:2},{a: 1,b:2}, toggle:true]导致视图不更新且数据没有响应式。这种格式是数组套对象的&#xff0c;之后由于不想在遍历一层数据变成[{a: 1,b:2,toggle:true},{a: 1,b:2,oggle:true} ] ,就直接加在对象后面了【虽然这样写法不对&#xff0c;但是&#…

LLM端侧部署系列 | 陈天奇MLC-LLM重磅升级:基于机器学习编译的通用LLM部署引擎

引言 简介 MLCEngine的聊天功能 OpenAI风格API 云端REST API Python API iOS SDK Android SDK WebLLM SDK 小结 结构化生成 支持各种平台 优化引擎性能 总结 引言 流星透疏水&#xff0c;走月逆行云。 小伙伴们好&#xff0c;我是《小窗幽记机器学习》的小编&am…

如何获取泛型参数【Java】

对于一个基本的类 public class BaseDao<T>{T findOne() {return T;} }它的子类 public class StudentDao extends BaseDao<StudentDao.Student>{public static class Student{}}如何获得当前类对应的泛型参数呢&#xff1f; 方法一 JDK public static void ma…