和链表、二叉树以及数组这些热门的数据结构相比,堆相对比较冷门。如果你对数据结构了解不深的话,可能很少听说。但是我们经常用到它,虽然可能你并不一定能感知到。比如说优先队列,我们就经常使用。我们需要用到这样一个数据结构,能够根据我们存入数据的优先级进行排序,将优先级高的排在前面。在和调度相关的一些系统和算法当中,优先队列是必然会用到的。但是很少有人知道,优先队列说是一个队列,但其实是通过堆实现的。

那么堆究竟是一个怎样的数据结构呢?

堆的定义

堆的实质其实是二叉树,并且还不是一般的二叉树,而是比较特别的二叉树。

特别在什么地方呢,在于这棵二叉树除了叶子之外的所有节点都是“满”的。所谓的满,也就是没有空缺的意思。

从上图当中我们可以看到,如果去掉最后一层,那么这棵二叉树就是全满的。最后一层叶子节点也是有要求的,要求叶子节点都靠左对齐。满足这两个条件的二叉树成为完全二叉树(complete binary tree)。这个概念如果记不住也没有关系,我好像也只在堆当中遇到。

堆是完全二叉树,但是显然不是所有的完全二叉树都是堆,堆还有一个特殊的性质,就是大小的传递性

堆根据大小传递性的不同分为大顶堆和小顶堆&

数据结构面试的常客,一文带你深入了解堆相关推荐

  1. 一文带你全方位(架构,原理及代码实现)了解Flink(3.2W字建议收藏)

    注:最底部有PDF目录 一 flink简介 1.1 什么是flink Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎.F ...

  2. 一文带你理解Java中Lock的实现原理

    转载自   一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题.java提供了两种方式来加锁,一种是关键字:synchron ...

  3. 医疗保健、零售、金融、制造业……一文带你看懂大数据对工业领域的影响!...

    作者 | Zubair Hassan 译者 | 风车云马 责编 | 徐威龙 封图| CSDN 下载于视觉中国 随着大数据技术的兴起,工业领域在很大程度上发生了变化.智能手机和其他通讯方式的使用迅速增加 ...

  4. python中集合运算_入门 | 一文带你了解Python集合与基本的集合运算

    原标题:入门 | 一文带你了解Python集合与基本的集合运算 选自DataCamp 作者:Michael Galarnyk 参与:Geek Ai.思源 一般我们熟悉 Python 中列表.元组及字典 ...

  5. RPC框架:一文带你搞懂RPC

    RPC是什么(GPT答) ChatGPT回答: RPC(Remote Procedure Call)是一种分布式应用程序的编程模型,允许程序在不同的计算机上运行.它以一种透明的方式,将一个程序的函数调 ...

  6. 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字

    this 是一个令无数 JavaScript 编程者又爱又恨的知识点.它的重要性毋庸置疑,然而真正想掌握它却并非易事.希望本文可以帮助大家理解 this. JavaScript 中的 this Jav ...

  7. K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目

    K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目 1.前言 2.简介 2.1.为什么写这篇文章 2.2.需求描述 2.3.需求分析 3. 部署实战 3.1 环境准备 3.2 i ...

  8. 一文带你Linux系统编程入门

    文件和文件系统 文件是linux系统中最重要的抽象,大多数情况下你可以把linux系统中的任何东西都理解为文件,很多的交互操作其实都是通过文件的读写来实现的. 文件描述符 在linux内核中,文件是用 ...

  9. 精华推荐 | 【JVM深层系列】「GC底层调优系列」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)

    前提介绍 很多小伙伴,都跟我反馈,说自己总是对JVM这一块的学习和认识不够扎实也不够成熟,因为JVM的一些特性以及运作机制总是混淆以及不确定,导致面试和工作实战中出现了很多的纰漏和短板,解决广大小伙伴 ...

最新文章

  1. footer固定在页面底部的实现方法总结
  2. ept技术_EPT技术在压载水处理中的运用
  3. 织梦自定义html文本,织梦自定义标签dede:sql根据自定义字段填的文章id获取相关文章...
  4. 秒杀场景_重复抢单问题分析与实现_03
  5. java中get接口示例_Java即时类| 带示例的get()方法
  6. linux php c 扩展,linux php添加扩展库
  7. 模拟京东按s键选中输入框
  8. Mysql笔记——DCL
  9. 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句
  10. 软件工程学习笔记(二)~软件需求说明书
  11. 超强OCR文字识别软件 图像文字识别软件工具-独有直接屏幕截图识别功能
  12. vscode终端中文乱码问题的解决方案合集c++
  13. 佳能dpp4中文版 附使用教程
  14. 苹果手机如何分享wifi密码_怎样用手机改wifi密码
  15. 防火墙命令补充和dmz_远程管理
  16. NUC的型号说明及其他的一些信息
  17. [React]网易云音乐Web PC端
  18. 无符号驱动调试 win10
  19. 请问如何快速画出此图的盒图
  20. 阿里云API网关调用示例

热门文章

  1. NSDateFormatter and NSDateComponents
  2. WinCVS与CVSNT简明使用手则
  3. PAT甲级1138 Postorder Traversal:[C++题解]前序遍历和中序遍历建树
  4. uniapp商城_【程序源代码】商城小程序
  5. 字典对中文字符串进行排序 python_Python基础入门:字符串和字典
  6. 暗备用的运行状态_备用发电机管理制度
  7. python运用实例视频_python爬视频实例
  8. mysql日期和时间类型_MySQL日期和时间类型
  9. php中的伪类选择器,css伪类选择器介绍
  10. 计算机科学与控制面试说课,计算机科学与技术专业的说课.pptx