数据结构之堆

news/2024/10/19 6:25:00/

1.二叉堆

时间复杂度,获取最大值O(1),删除最大值O(logn),添加元素O(logn)

1.1什么是堆

二叉堆(Heap)是一种特殊的数据结构,它是一棵完全二叉树。通常分为大根堆和小根堆两种类型。在大根堆中,每个父节点都大于或等于它的子节点;而在小根堆中,每个父节点都小于或等于它的子节点。

堆的主要操作有:

  1. 插入元素:把元素插入到堆中的合适位置,以维持堆的性质。

  2. 删除堆顶元素:删除堆顶元素并重新调整堆,以维持堆的性质。

  3. 堆化(建堆):将一个无序的序列转化为一个堆。

  4. 更新堆中的元素:更新堆中某个元素的值,并重新调整堆。

上滤(sift up)和下滤(sift down)是堆化的两种基本操作。上滤是将新元素插入到堆中并将其上移到合适位置;下滤则是将堆顶元素移动到合适位置以维持堆的性质。

堆的应用非常广泛,例如:

  1. 堆排序:利用堆排序算法可以对一个序列进行排序。

  2. 优先队列:堆可以用作优先队列,其中每个元素都带有一个优先级,每次从队列中取出的元素都是优先级最高的元素。

  3. 图论算法:堆可以用于图论算法中,例如Dijkstra最短路径算法和Prim最小生成树算法等。

  4. 堆积树:堆可以用于存储动态过程中的历史信息,例如计算机内存分配和垃圾回收等

1.2堆的性质

任意节点的值总是 >= (<=)子节点的值。
如果任意结点的值总是 >= 子节点的值,称为:大根堆,大顶堆,最大堆。
如果任意结点的值总是 <= 子节点的值,称为:小根堆,小顶堆,最小堆。

2.堆的接口

template<typename T>
class Heap
{
public:int size();bool isEmpty();void clear();void add(T element);//添加元素T get();			//获取堆顶元素T remove();			//删除堆顶元素
};

3.接口的实现

二叉堆的逻辑结构就是一棵二叉树,所以也叫完全二叉堆。但鉴于完全二叉树的特性,二叉堆的底层(无力结构)一般用数组实现。


http://www.ppmy.cn/news/64513.html

相关文章

C++ STL:set和map的结构及接口使用

目录 一. set和map的简介 1.1 set的简介 1.2 map的简介 二. set的主要接口函数及使用方法 2.1 构造及赋值相关接口函数 2.2 通过迭代器遍历set 2.3 结构修改相关接口函数 2.4 其他主要接口函数 三. map的主要接口函数及使用方法 3.1 构造和赋值相关接口函数 3.2 通…

(免费分享)springboot,vue物业管理系统

一、项目技术 后端框架&#xff1a;springboot 前端框架&#xff1a;elementUIvue 主要实现了用户登录、社区信息展示、物业公告、社区设施、物业人员信息。 进入物业系统管理后端。实现了社区的管理&#xff0c;包括基本信息管理、周边设施管理、物业公告管理。楼盘管理包括楼…

C++ | 结构体及大小计算

C结构体及大小计算 文章目录 C结构体及大小计算struct 和 class 区别字节对齐默认对齐方式 位域使用#pragma pack(n)结构体中有结构体Reference struct 和 class 区别 结构体&#xff08;struct&#xff09;和类&#xff08;class&#xff09;有点像&#xff0c;均是定义一个数…

什么是应用交付网络(ADN)

从CDN到ADN CDN&#xff08;内容分发网络&#xff09;在90年代末受到麻省理工学院的启发并完成发明&#xff0c;00年代初成立第一家成功的CDN商业企业Akamai。CDN的目标是相对于最终用户在空间上分配服务&#xff0c;以提供高可用性和高性能。随着互联网的发展&#xff0c;CDN…

设计模式(二):依赖倒转原则(详解)

依赖倒转原则 前言一、依赖倒转原则1、基本介绍2、依赖关系传递的三种方式3、注意事项 二、代码演示1、版本一2、版本二3、版本三 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#xff01;也许一个人独行&am…

Http 响应头 Transfer-Encoding : chunked 导致 浏览器客户端请求错误问题

生产环境服务器规划如下 服务器类型网络环境cal.comnginx外网192.168.7.15:9200tomcat内网192.168.7.16:9200tomcat内网sdd.comnginx内网192.168.7.15:9100tomcat内网192.168.7.16:9100tomcat内网 192.168.7.15和192.168.7.16是做个负载均衡。目前的需求是用户访问外网的cal.…

【存储数据恢复】NetApp存储WAFL文件系统数据恢复案例

存储数据恢复环境&#xff1a; NetApp存储设备&#xff0c;WAFL文件系统&#xff0c;底层是由多块硬盘组建的raid磁盘阵列。 存储故障&#xff1a; 工作人员误操作导致NetApp存储内部分重要数据被删除。 存储数据恢复过程&#xff1a; 1、将存储设备的所有磁盘编号后取出&…

springboot + vue 部署 阿里云云服务器 ECS

安装所需文件 安装mysql5.7 下载MySQL的yum源配置 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装MySQL的yum源 yum -y install mysql57-community-release-el7-11.noarch.rpm使用yum方式安装MySQL5.7&#xff08;下载需要点时间&#xf…