定义

堆是一种特别的完全二叉树,分为两种:大顶堆和小顶堆。
小顶堆(min heap):父节点的值恒小于等于子节点的值;
大顶堆(max heap):父节点的值恒大于等于子节点的值。

实现

由于堆本质上是一棵完全二叉树,通常是采用数组作为其存储结构,以数组作为其存储结构的好处是,我们可以通过下标索引的方式去访问节点的父节点和孩子节点。

对于堆中任意一个节点 i 有:

i的父节点:parent( i ) = floor( (i - 1) / 2 )

i的左孩子:left( i ) = 2 * i + 1

i的右孩子:right( i ) = 2 * i + 2

优先队列

通常采用堆数据结构来实现优先队列。

 #include <functional> //包含greater和less两个优先级函数#include <queue> //priority_queue的头文件/*大顶堆*/priority_queue<int, vector<int>, less<int>>pq_max;/*小顶堆*/priority_queue<int, vector<int>, greater<int>>pq_min;/*优先队列的操作*/pq.push();  //向队列中插入一个元素pq.pop();  //删除堆顶的元素pq.top();  //返回堆顶元素pq.size();  //返回队列中的元素个数pq.empty();  //判断队列是否为空

复杂度

insert(): O(log n)
remove(): O(log n)
search(): O(n)
buildHeap(array): O(n)
peek(): O(1)

Reference

https://www.jianshu.com/p/6b526aa481b1

堆(Heap)数据结构介绍相关推荐

  1. 数据结构之堆Heap

    1. 概述 堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆).它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等. 2. 堆 ...

  2. 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)

    堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...

  3. 数据结构之堆(Heap)及其用途

    本文采用图文码结合的方式介绍堆来实现优先队列 什么是优先队列? 队列是一种先进先出(FIFO)的数据结构.虽然,优先队列中含有队列两个字,但是,他一点也不像队列了.个人感觉,应该叫他优先群.怎么说那, ...

  4. codeforces 贪心+优先队列_算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)...

    堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值:

  5. 数据结构--堆(Heap)

    堆(Heap) 本文主要介绍以下内容: Heap的实现 HeapSort(堆排序) 完善各种堆的函数接口 TopK经典问题 堆就是一棵完全二叉树.因为它的某些性质,我们可以用数组存储. 堆的性质 1 ...

  6. 数据结构-堆(Heap)

    数据结构-堆(Heap) 我认识的堆: 1.建立在完全二叉树的基础上 2.排序算法的一种,也是稳定效率最高的一种 3.可用于实现STL中的优先队列(priority_queue)  优先队列:一种特殊 ...

  7. heap python_数据结构-堆(Heap) Python实现

    堆(Heap)可以看成近似完全二叉树的数组,树中每个节点对应数组中一个元素.除了最底层之外,该树是完全充满的,最底层是从左到右填充的. 堆包括最大堆和最小堆:最大堆的每一个节点(除了根结点)的值不大于 ...

  8. c语言建立小根堆的算法,小根堆(Heap)的详细实现

    堆的介绍 Heap是一种数据结构具有以下的特点: 1)完全二叉树 2)heap中存储的值是偏序 Min-heap: 父节点的值小于或等于子节点的值 Max-heap: 父节点的值大于或等于子节点的值 ...

  9. 一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc

    大家好,我是无际. 有一周没水文了,俗话说夜路走多了难免遇到鬼. 最近就被一个热心网友喷了. 说我的文章没啥营养,所以今天来一篇烧脑的. 哈哈,开个玩笑,不要脸就没人能把我绑架. 主要是最近研发第二代 ...

  10. 十四、堆(Heap)

    0. 堆(Heap) 堆排序是一种原地的.时间复杂度为O(nlogn)的排序算法. 引入:快速排序平均情况下,时间复杂度为O(nlogn),甚至堆排序比快速排序的时间复杂度还要稳定,但在实际中,快排性 ...

最新文章

  1. 小R SLAM机器人树莓派3b+ ROS kinetic 环境搭建笔记
  2. 函数调用oracle,oracle 函数调用
  3. cli3 px转rem适配移动端_Vue:将px转化为rem,适配移动端
  4. python笔记基础-Python基础教程学习笔记-1
  5. View工作原理(二)导致View重建原因
  6. php调用sql数据库代码怎么写,PHP读取SQL文件并导入数据库(示例)
  7. 在浏览器设置里能看到cookie, 页面调试Application里看不到
  8. 男女洗澡前后区别,太形象了!(文末送书)
  9. java csrf 跨域_使用javascript跨域请求与CSRF
  10. Win32学习笔记(21)内存映射文件
  11. →箭头符号大全复制_WORD特殊符号大全lpar;直接复制即可rpar;
  12. [云原生专题-34]:K8S - 核心概念 - 网络 - Web服务器与反向代理服务器nginx入门介绍
  13. 2011年北邮各组组线
  14. qpython2_QPython
  15. 「数字货币监管」听证会重磅来袭,无形之笼悄然降临?
  16. 2006年主流建站系统及其典型网站演示(CMS篇)
  17. 酒店预定系统开发方案
  18. C++的emplace_back函数介绍
  19. 模电-基本放大电路-共射放大
  20. 软件测试工程师在线培训,软件测试工程师培训.PDF

热门文章

  1. # 这是一级标题 ## 这是二级标题
  2. 读《质量·软件·管理》有感
  3. CSS+HTML+JS----开发简单个人网站
  4. Canvas实现网页协同画板
  5. 方配网站服务器64位版,方配网站服务器(FPWebServer) v3.0 支持64位
  6. 车轮件缺陷分析及设计优化 | 智铸超云案例分享
  7. P3518 [POI2011]strongbox
  8. quorum中的BFT
  9. Linux软链接的创建 删除 修改
  10. php随机生成手机号码