数据结构——堆

1、概念与结构

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

2、堆的性质

  • 堆中的某个结点的值总是不大于不小于其父节点的值
  • 堆总是一棵完全二叉树
  • 对于具有 n 个结点的完全⼆叉树,如果按照从上⾄下从左⾄右的数组顺序对所有结点从 0 开始编号,则对于序号为 i 的结点有:

1、若 i>0 , i 位置结点的双亲序号: (i-1)/2 ; i=0 , i 为根结点编号,⽆双亲结点

2、若 2i+1,左孩⼦序号: 2i+1 , 2i+1>=n 否则⽆左孩⼦

3、 若 2i+2,右孩⼦序号: 2i+2 , 2i+2>=n 否则⽆右孩⼦

3、堆的结构演示

4、堆的实现

(1)堆的初始化

(2)堆的销毁

(3)堆的向上调整算法

  • 小堆:使用<
  • 大堆:使用>

(4)堆的打印

(5)入堆

  • 首先要判断空间是否足够,即判断size和capacity的值是否相等
  • 将堆内的arrphp-\>size位置赋值为x,并且进行向上调整排序

(6)堆的判空

(7)出堆

  • 首先要判断堆是否为空
  • 出堆操作只能对堆顶操作
  • 最后进行出堆操作

(8)向下调整算法

(9)取堆顶数据

(10)堆排序

此处已经在下面文章中的详细讲解,各位可以跳转阅读

数据结构---排序-CSDN博客

(11)Top-k问题

相关推荐
通信小呆呆9 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
benben0449 小时前
强化学习之DQN算法族(基于gymnasium开发)
算法
小小工匠10 小时前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾10 小时前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
何以解忧,唯有..11 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
想吃火锅100511 小时前
【leetcode】88.合并两个有序数组js
算法
生成论实验室12 小时前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
Qres82112 小时前
算法复键——树状数组
数据结构·算法
H1785350909612 小时前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks