堆和栈的区别:
一、空间分配区别:

  • 栈(操作系统):由操作系统自动分配释放,存放函数的参考值,局部变量的值等。其操作方式类似于数据结构中的栈
  • 堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表

二、缓存方式区别:

  • 栈使用的是一级缓存,他们通常都是被调用时处于存储空间中,调用完毕立即释放
  • 堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦称为孤儿对象就能被回收),所以调用这些对象的速度相对低

三、数据结构区别:

  • 堆(数据结构):堆可以被看成一棵树,如:堆排序
  • 栈(数据结构):一种先进后出的数据结构

堆是一棵完全二叉树
堆中的某个结点的值总是大于等于(最大堆)或小于等于(最小堆)其孩子结点的值
堆中每个结点的子树都是堆树

最大堆和最小堆是二叉堆的两种形式

  • 最大堆(大根堆):根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子大
  • 最小堆(小根堆):根结点的键值是所有堆结点键值中最小者,且每个结点的值都比其孩子的值小

堆树的操作:
以最大堆为例进行讲解,最小堆同理
原始数据为a[ ]={4,1,3,2,16,9,10,14,8,7}
采用顺序存储方式,对应的完全二叉树如图:
(1)构造最大堆
构造堆的基本思想是:首先将每个叶子结点视为一个堆,再将每个叶子结点与其父节点一起构造成一个包含更多结点的对

所以在构造堆时,首先要找到最后一个结点的父节点,从这个结点开始构造最大堆;直到该节点前面所有分支节点都处理完毕,这样最大堆就构造完毕了

假设树的结点个数为n,以1为下标开始编号,直到n结束。对于结点i,其父节点为i/2;左孩子结点为i2,右孩子结点为i2+1。最后一个结点的下标为n,其父节点的下标为n/2

如图,最后一个节点为7,其父节点为16,从16这个节点开始构造最大堆;构造完毕后,转移到下一个父节点,直到所有父节点都构造完毕

最大堆和最小堆(数据结构)相关推荐

  1. 数据结构与算法--二叉堆(最大堆,最小堆)实现及原理

    二叉堆(最大堆,最小堆)实现及原理 二叉堆与二叉查找树一样,堆也有两个性质,即结构性质和堆性质.和AVL树一样,对堆的一次操作必须到堆的所有性质都被满足才能终止,也就是我们每次对堆的操作都必须对堆中的 ...

  2. 数据结构——最大堆和最小堆(C语言)

    定义: 最大堆和最小堆都是一棵完全二叉树. 最大堆:是指根节点的关键字值是堆中的最大关键字值,且每个节点若有儿子节点,其关键字值都不小于其儿子节点的关键字值. 最小堆:是指根节点的关键字值是堆中的最小 ...

  3. 最大堆和最小堆基本概念(以及栈和堆的区别)

    堆和栈的区别: 一.堆栈空间分配区别: 1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈: 2.堆(操作系统): 一般由程序员分配释放, ...

  4. C++实现最大堆和最小堆

    堆 堆数据结构是一种数组对象,它可以被视为一颗完全二叉树结构(或者也有可能是满二叉树) 最大堆: 任一结点的关键码均大于等于它的左右孩子的关键码,其中堆顶的元素最大.(任一路径中的元素升序排列) 最小 ...

  5. 如何构造最大堆和最小堆?

    最大堆和最小堆又叫大顶堆和小顶堆(大根堆和小根堆),是二叉树的一种排列方式. 最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大. 最小堆:根结点的键值是所有堆结点键值中最小 ...

  6. 最大堆、最小堆Java实现,解决TOP K问题

    一.基础知识 1.1 什么是最大(小)堆 最大堆,最小堆类似,以下以最小堆为例进行讲解. 最小堆是满足以下条件的数据结构: 它是一棵完全二叉树 所有父节点的值小于或等于两个子节点的值 1.2 什么是完 ...

  7. C++判断一个序列是否为堆(最大堆、最小堆)

    参考:https://blog.csdn.net/guoweimelon/article/details/50904346 1.如何判断一个序列是不是堆? 把这个序列看成是数组型的二叉树,如果根节点是 ...

  8. 最大堆和最小堆和平衡二叉树_最小堆二叉树

    最大堆和最小堆和平衡二叉树 A Min Heap Binary Tree is a Binary Tree where the root node has the minimum key in the ...

  9. 2020 C++ priority_queue 最大堆与最小堆介绍

    文章目录 1.问题描述 2.具体分析 3.其他方式 4.用最小堆解决问题 1.问题描述 通常在刷题的时候,会遇到最大堆.最小堆的问题,这个时候如果自己去实现一个也是OK的,但是通常时间不太够,那么如何 ...

最新文章

  1. 判断参数对象是否为DBNULL
  2. rs232 距离_你知道RS232与RS485接口的区别吗?
  3. 内排序及时间复杂度分析-插入排序选择排序交换排序归并排序分配和索引排序对比...
  4. 关于 Unity WebGL 的探索
  5. RabbitMQ liunx-centos 安装过程记录
  6. nginx配置文件注释说明
  7. 数据库事务日志已满的解决办法
  8. 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises05
  9. IDEA安装Vue插件
  10. 正则表达式的基本原理
  11. 四象限法推导lm曲线_提出研究问题的“四象限法”
  12. 使用python完成知乎模拟登陆
  13. MCD12Q1数据处理教程——基于HEG、ArcGIS和ENVI
  14. 微信小程序做图片压缩
  15. Leetcode 2127. 参加会议的最多员工数
  16. win10系统安装打印机失败如何解决?
  17. 手机怎么解决同ip多账号_问道手游:2019搬砖技巧分享,多开养号才是王道,三天肝出月卡...
  18. 零基础入门NLP - 天池新闻文本分类Task3笔记
  19. 入手多普达D900(T版)- 心疼
  20. kubernetes-dashboard登录出现forbidden 403

热门文章

  1. .so是什么文件_Linux的so文件到底是干嘛的?浅析Linux的动态链接库
  2. 关于一个任意文件上传漏洞场景的讨论
  3. 再见 HTTP?10 分钟手把手教会你将网站切换到 HTTPS,安全有保障,yyds!
  4. ad16自动布线设置规则_pcb自动布线设置_设置线间距与宽度设置_pcb布局布线技巧...
  5. dns 解析,一个域名解析到多个ip地址
  6. 【C语言】字符串的拷贝
  7. 【MATLAB】矩阵元素及其基本运算
  8. 笔记本电脑黑屏基础处理
  9. 最近很火的人工智能ChatGPT可以实现“ 连续对话”机制
  10. 【JS】Javascript中的this到底是什么