数据结构——堆

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的值是否相等
  • 将堆内的arr[php->size]位置赋值为x,并且进行向上调整排序

(6)堆的判空

(7)出堆

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

(8)向下调整算法

(9)取堆顶数据

(10)堆排序

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

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

(11)Top-k问题

相关推荐
AMiner:AI科研助手2 小时前
警惕!你和ChatGPT的对话,可能正在制造分布式妄想
人工智能·分布式·算法·chatgpt·deepseek
CHANG_THE_WORLD5 小时前
并发编程指南 同步操作与强制排序
开发语言·c++·算法
gaoshou456 小时前
代码随想录训练营第三十一天|LeetCode56.合并区间、LeetCode738.单调递增的数字
数据结构·算法
自信的小螺丝钉7 小时前
Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分
算法·leetcode·矩阵
闪电麦坤957 小时前
数据结构:深度优先搜索 (Depth-First Search, DFS)
数据结构·深度优先
KING BOB!!!8 小时前
Leetcode高频 SQL 50 题(基础版)题目记录
sql·mysql·算法·leetcode
我是渣哥8 小时前
Java String vs StringBuilder vs StringBuffer:一个性能优化的探险故事
java·开发语言·jvm·后端·算法·职场和发展·性能优化
THMAIL8 小时前
机器学习从入门到精通 - 机器学习调参终极手册:网格搜索、贝叶斯优化实战
人工智能·python·算法·机器学习·支持向量机·数据挖掘·逻辑回归
lytk999 小时前
矩阵中寻找好子矩阵
线性代数·算法·矩阵
珊瑚怪人9 小时前
算法随笔(一)
算法