堆的基本存储(Java 实例代码)

news2024/9/21 4:37:11

堆的基本存储

一、概念及其介绍

堆(Heap)是计算机科学中一类特殊的数据结构的统称。

堆通常是一个可以被看做一棵完全二叉树的数组对象。

堆满足下列性质:

  • 堆中某个节点的值总是不大于或不小于其父节点的值。
  • 堆总是一棵完全二叉树。

二、适用说明

堆是利用完全二叉树的结构来维护一组数据,然后进行相关操作,一般的操作进行一次的时间复杂度在 O(1)~O(logn) 之间,堆通常用于动态分配和释放程序所使用的对象。

若为优先队列的使用场景,普通数组或者顺序数组,最差情况为 O(n^2),堆这种数据结构也可以提高入队和出队的效率。

入队出队
普通数组O(1)O(n)
顺序数组O(n)O(1)
O(logn)O(log)

三、结构图示

二叉堆是一颗完全二叉树,且堆中某个节点的值总是不大于其父节点的值,该完全二叉树的深度为 k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边。

其中堆的根节点最大称为最大堆,如下图所示:

我们可以使用数组存储二叉堆,右边的标号是数组的索引。

假设当前元素的索引位置为 i,可以得到规律:

parent(i) = i/2(取整)
left child(i) = 2*i
right child(i) = 2*i +1

四、Java 实例代码

源码包下载:Downloadicon-default.png?t=N6B9https://www.runoob.com/wp-content/uploads/2020/09/runoob-algorithm-heap.zip

src/runoob/heap/MaxHeap.java 文件代码:

package runoob.heap;

/**
 * 堆定义
 */
public class MaxHeap<T> {
    private T[] data;
    private int count;
    // 构造函数, 构造一个空堆, 可容纳capacity个元素
    public MaxHeap(int capacity){
        data = (T[])new Object[capacity+1];
        count = 0;
    }
    // 返回堆中的元素个数
    public int size(){
        return count;
    }
    // 返回一个布尔值, 表示堆中是否为空
    public boolean isEmpty(){
        return count == 0;
    }
    // 测试 MaxHeap
    public static void main(String[] args) {
        MaxHeap<Integer> maxHeap = new MaxHeap<Integer>(100);
        System.out.println(maxHeap.size());
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/959828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

typescript的~~和双感叹号符号使用

&#xff08;标题不给用“!”&#xff09; "~~"符号使用 1.对于number类型的值&#xff0c;~~是取整作用 const num: number 3.14; const roundedNum: number ~~num; // 3 2.对于boolean类型的值&#xff0c;~ ~ true还是true&#xff0c;false还是false “!!”…

无涯教程-JavaScript - FLOOR函数

描述 FLOOR函数将数字向下舍入为零,直到最接近的有效倍数。 语法 FLOOR (number, significance)争论 Argument描述Required/OptionalNumberThe numeric value you want to round.RequiredSignificanceThe multiple to which you want to round.Required Notes 如果数字的符…

设计模式--多例模式(Multition pattern)

一、什么是多例模式&#xff08;Multition pattern&#xff09; 多例模式&#xff08;Multition pattern&#xff09;是单例模式的一种扩展&#xff0c;它属于对象创建类型的设计模式。在多例模式中&#xff0c;一个类可以有多个实例&#xff0c;并且这些实例都是该类本身。因…

APM32F4XX USB OTA

近期在研究USB CDC协议&#xff0c;使用USB Virtual Port Com功能与上位机通讯做了OTA功能。开发平台&#xff1a;MDK529开发硬件&#xff1a;APM32F411首先看下手册Flash分布&#xff0c;Flash总共8个扇区。 接下来进行Flash分区。 扇区 0 和 扇区 1做Boo区。 扇区 2做APP跳…

LeetCode(力扣)98. 验证二叉搜索树Python

LeetCode98. 验证二叉搜索树 题目链接代码 题目链接 https://leetcode.cn/problems/validate-binary-search-tree/ 代码 递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # …

基于RabbitMQ的模拟消息队列之五——虚拟主机设计

文章目录 一、创建VirtualHost类二、初始化三、API1.创建交换机2.删除交换机3.创建队列4.删除队列5.创建绑定6.删除绑定7.发送消息转发规则 8.订阅消息1.消费者管理2.推送消息给消费者 3.添加一个消费者管理ConsumerManager9.确认消息 创建VirtualHost类。 1.串起内存和硬盘的数…

ppt怎么压缩?这里有4个方法

ppt怎么压缩&#xff1f;PPT作为我们常用的文档格式&#xff0c;在演讲、总结汇报以及个人简历等场合中起到重要作用。一份PPT的页数可能从十几页到上百页不等&#xff0c;有些小伙伴为了追求ppt文件的美观度&#xff0c;会在文件中插入大量的高清图片&#xff0c;然而这种操作…

(附源码)使用 javascript 制作网页端 3D 贪吃蛇游戏

3D 网页版贪吃蛇游戏&#xff01;下面来具体讲一下如何实现。 该游戏使用 Hightopo 的 SDK 制作&#xff0c;总共 100 多行代码&#xff0c;没有 WebG L基础的同学们也可很快掌握。 场景初始化 首先&#xff0c;我们对页面进行初始化&#xff0c;包括初始化3D场景&#xff0c;…

护眼灯值不值得买?开学给孩子买什么样的护眼台灯

如果不想家里的孩子年纪小小的就戴着眼镜&#xff0c;从小就容易近视&#xff0c;那么护眼灯的选择就非常重要了&#xff0c;但是市场上那么多品类&#xff0c;价格也参差不齐&#xff0c;到底怎么选呢&#xff1f;大家一定要看完本期内容。为大家推荐五款热门的护眼台灯 一、…

XSS结合CSRF

假设我们获得了目标CMS的源码&#xff0c;搭建了一个相同的网站&#xff0c;我们在自己的网站执行添加用户的操作&#xff0c;并且用bp抓包 如图&#xff0c;这是我们抓到的添加用户的数据包 接下来&#xff0c;我们可以根据数据包构造js代码 <script> xmlhttp new XML…

WEBGL(1):WEBGL介绍

1 WebGL容器&#xff08;坐标系&#xff09; 在2D绘图环境中的坐标系统&#xff0c;默认情况下是与窗口坐标系统相同&#xff0c;它以canvas的左上角为坐标原点&#xff0c;沿x轴向右为正值&#xff0c;沿y轴向下为正值。其中canvas坐标的单位都是 "px"。 在浏览器中…

渗透测试工具ZAP入门教程(4)-设置代理谷歌浏览器

ZAP 代理原理 如下浏览器,拿Chrome为例,Chrome发出的请求都会先经过 ZAP, 然后再由 ZAP 发往服务器.如下图: 设置代理 1. Chrome设置只需要在地址栏输入 chrome://settings 2. 然后在搜索栏输入 代理 然后点击 打开您计算机的代理设置 3. 设置手动代理 端口为什么是 8080 呢?…

【发版公告】Virbox Protector 3.1.3.19051 发版- elf 文件支持导入表保护

深盾安全-软件保护工具 Virbox Protector 3 &#xff08; 3.1.3.19051&#xff09;迎来了版本升级.本次升级支持了 elf 文件导入表保护。 以下是本次 Virbox Protector 发版的主要功能&#xff1a; 新功能 1. ELF格式的程序支持导入表保护(Beta)&#xff1b;&#xff1b; 2…

代码随想录笔记--栈与队列篇

1--用栈实现队列 利用两个栈&#xff0c;一个是输入栈&#xff0c;另一个是输出栈&#xff1b; #include <iostream> #include <stack>class MyQueue { public:MyQueue() {}void push(int x) {in_stk.push(x);}int pop() {if(out_stk.empty()){while(!in_stk.empty…

Apollo领航官送福利啦

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f388;✨百度apollo介绍 全球智能驾驶产业领跑者 起源 百度…

stable diffusion实践操作-文生图

本文专门开一节写文生图相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 1 liblib SD1.5底模 lora(baihuaniang_1.0) 详细信息&#xff1a; 底模&#xff1a;SD 1.5 Lora:baihuaniang_1.0 正向提示词&#xff1a; Best …

ubuntu18.04.6的安装教程

目录 一、下载并安装virtualbox virtualbox7.0.8版本的安装 二、Ubuntu的下载与安装 ubuntu18.04.6操作系统 下载 安装 一、下载并安装virtualbox VirtualBox是功能强大的x86和AMD64/Intel64虚拟化企业和家庭使用的产品。VirtualBox不仅是面向企业客户的功能极其丰富的高…

微信小程序 - 2023年最新版手机号快捷登录详细教程

前言 最近开发公司手机快捷登录的功能&#xff0c;花费了不少时间&#xff0c;这里附上详细教程。 这里以海底捞小程序的图片为例&#xff0c;如有侵权请联系小编删除。 代码如下 <button open-type"getPhoneNumber" getphonenumber"getPhoneNumber"…

自动驾驶——【规划】记忆泊车特殊学习路径拟合

1.Back ground 如上图&#xff0c;SLAM学习路线Start到End路径&#xff0c;其中曲线SDAB为D档位学习路径&#xff0c;曲线BC为R学习路径&#xff0c;曲线AE为前进档D档学习路径。 为了使其使用记忆泊车时&#xff0c;其驾驶员体验感好&#xff0c;需去除R档倒车部分轨迹&#x…

【STM32教程】第三章 使用OLED屏作为调试工具

案例代码及相关资料下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwdjauj 提取码&#xff1a;jauj 1 OLED调试工具 1.1对程序调试的认识与OLED简介 本章节只需要知道怎么调用封装好的驱动函数&#xff0c;用OLED屏幕来做调…