数据结构之堆(我猜,关于堆的这些维护细节,你肯定不清楚,不信你来看!)

本文深入解析堆的数据结构,包括大顶堆和小顶堆的定义、作用,以及它们在数组中的底层实现。重点探讨堆的扩容、元素上浮和堆顶元素下沉的维护操作,并通过实例阐述堆在寻找最大值问题中的应用。
摘要由CSDN通过智能技术生成

  在前面分析了二叉搜索树红黑树等众多树结构,今天博主给大家换个口味,深入分析一下的实现原理与维护规则。(其实与二叉树有点相似)

一、的概述

1、什么是

  ,在日常生活中是一个量词,比如:一堆木头,下面这张图就是一堆木头,大家注意它的摆放规则,成金字塔型(上窄下宽)。
在这里插入图片描述
  数据结构中的,与上面的结构类似,不过借助了二叉树的结构。肯定会有小伙伴来一句,woc,这不就是二叉树么。。。其实你也可以暂时这么理解,看完博客你就会发现还是有些区别。
在这里插入图片描述

2、的划分

  根据中元素摆放顺序的不同,可分为两种堆结构,小顶堆大顶堆

小顶堆:对于堆中的任意节点A,如果它存在子节点B、C,则 节点A的值 ≤ min{ 子节点B的值, 子节点C的值}

大顶堆:对于堆中的任意节点A,如果它存在子节点B、C,则 节点A的值 ≥ max{ 子节点B的值, 子节点C的值}
在这里插入图片描述
注 意 : \color{red}注意: 堆只对父节点的值与子节点的值有大小限定,但是对于节点左、右子节点的值相对关系没有限定(二叉搜索树的特征才是 左子节点 < < 右子节点)。

3、的作用

  讲了半天,也画了好几张图,辣么有什么作用呢?

  根据前面小顶堆大顶堆的定义,我们知道小顶堆堆顶存放的是堆中最小的元素,大顶堆堆顶存放的堆中最大的元素。而这正是的作用,可能会有小伙伴一脸鄙夷,就这找最值的功能都要特意设计一个数据结构来实现?

  那来一道面试题,给你10亿个数,如何在最短的时间里找出最大的10个? (我觉得如果没做出这道题,辣么只能说了解堆的定义,但是不理解、不会运用,边看博客,边思考吧,文末附答案)

二、的底层实现

  的实现一般使用数组,而不是二叉树</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值