当前位置: 首页 > article >正文

数据结构与算法——堆的基本存储

目录

一、概念及其介绍

二、适用说明

三、结构图示

四、Java 实例代码

五.堆和栈的区别


一、概念及其介绍

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

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

堆满足下列性质:

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

二、适用说明

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

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

三、结构图示

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

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

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

 

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

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

 四、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());
    }
}

五.堆和栈的区别

  • 栈Stack:是私有的,每创建一个线程就会创建一个栈,栈中存放数据为当前线程中局部基本类型的数据,(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double),非基本类型的对象在JVM栈上仅存放一个指向堆上的地址
  • 堆Heap :JVM用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收

http://www.kler.cn/a/3061.html

相关文章:

  • 书生大模型实战营5
  • .NET MAUI进行UDP通信(二)
  • STM32 TIM输入捕获 测量频率
  • 架构技能(六):软件设计(下)
  • 【PySide6快速入门】QLineEdit 输入框
  • Node.js与MySQL模块结合:打造安全高效的用户信息管理系统
  • 电路设计的一些概念
  • 华为OD机试题,用 Java 解【卡片组成的最大数字】问题 | 含解题说明
  • 8个你一看就觉得很棒的Vue开发技巧
  • Liunx下的进程程序替换
  • GitHub Actions工作流搭建
  • jmeter 响应时间rt很小,但是tps也很小jmeter,脚本处理,千万不要用js
  • SpringBoot实战(十三)集成 Admin
  • 技术分享——Java8新特性
  • C语言——字符函数和字符串函数【详解】(一)
  • 如何才能做好Android 性能优化?
  • 基于Linux内核的驱动开发
  • Vue趣味【Vue3+Element Plus+Canvas实现一个简易画板;支持导出为图片】
  • new动态内库管理库学习
  • 【统计学习】25个必须掌握的数据分析基础概念
  • C# 委托
  • 【ARCore】Android ARCore 简介 ( AR 增强现实技术简介 | Android 平台常用的 AR 技术 | ARCore 相关资料收集 )
  • 从0到1深度学习环境搭建
  • 你值得拥有——流星雨下的告白(Python实现)
  • 20美刀一个月的ChatGPT架构师,性价比逆天了
  • Vue2 和 Vue3 的对比