前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >堆的认识

堆的认识

作者头像
神奇的程序员
发布2022-04-10 09:18:21
2130
发布2022-04-10 09:18:21
举报

概念

堆是一种图的数据结构,被用于实现“优先队列”。优先队列是一种数据结构,可以自由添加数据,但取出数据时要从最小值开始按顺序取出。在堆的树形结构中,各个顶点被称为“结点(node)”,数据就存储在这些节点中。

堆的特点

如图所示,每个节点由两个子节点,用线条连接即为堆。

  • 结点内的数字就是存储的数据
  • 堆中的每个结点最多有两个子节点
  • 树的形状取决于数据的个数
  • 节点的排列顺序为从上到下,同一行里则为从左到右
  • 堆的父节点必须小于子结点

堆的数据存储

在堆中存储数据时必须遵守这样一条规则:子结点必定大于父节点

  • 顶端的结点为根节点存储的数据为堆中的最小值
  • 新数据增加时会被放在堆的最底部靠左的位置
  • 堆的底部没有多余空间时,会另起一行把数据加在这一行的最左端

例如,将数字5添加到堆中

  • 结点6有个空位置,将数字5加在结点6中
  • 数字5结点的父结点大于本身,故调换位置
  • 交换完毕后数字5结点的父节点小于本身,所以不再交换,往堆中插入数据5的操作结束

堆的数据获取

从堆中获取数据时,需要从最上面的数据开始取,取完数据后,堆需要进行重新排序,将最后的数据移到取出的结点位置。

如图所示,取出堆中的数字1。

  • 1被取出后,结构需要重新调整
  • 将最后的数字6结点移到最顶部
  • 如果子结点的数字小于父节点,就将父节点与其左右两个子节点中较小的一个进行交换
  • 数字6结点的子结点3和5,3为较小者。故与3进行位置调换
  • 交换后,数字6结点的两个子节点4和8,4为较小者。故与4进行位置交换
  • 交换后,数字6结点无子节点。故交换完毕,从堆中取出数据的操作完成

写在最后

  • 文中使用的图片源自《我的第一本算法书》,如若侵权,请评论区留言,作者立即删除相关图片。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 神奇的程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
  • 堆的特点
  • 堆的数据存储
  • 堆的数据获取
  • 写在最后
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档