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

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

目录

一、概念及其介绍

二、适用说明

三、结构图示

四、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;}// 测试 MaxHeappublic 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.lryc.cn/news/42646.html

相关文章:

  • 来了来了 !!!K8s指令、yaml部署
  • spring-cloud-feign实战笔记
  • 【Pytorch】利用PyTorch实现图像识别
  • 在家查找下载最新《柳叶刀》The Lancet期刊文献的方法
  • 当下的网络安全行业前景到底怎么样?还能否入行?
  • SpringCloud:SpringAMQP介绍
  • 第十三届蓝桥杯省赛 python B组复盘
  • SQL注入之HTTP请求头注入
  • Metasploit详细教程
  • 【ChatGPT】Notion AI 从注册到体验:如何免费使用
  • 每个开发人员都需要掌握的10 个基本 SQL 命令
  • Vue项目预渲染
  • 可别再用BeanUtils了(性能拉胯),试试这款转换神器
  • Transformer 杂记
  • 实现异步的8种方式
  • Github隐藏功能显示自己的README,个人化你的Github主页
  • 单片机 | 51单片机原理
  • (只需五步)注册谷歌账号详细步骤,解决“此电话号码无法验证”问题
  • ChatGPT使用介绍、ChatGPT+编程、相关组件和插件记录
  • linux系统中复制粘贴和头文件问题解决方案
  • Vue项目实战 —— 后台管理系统( pc端 ) —— Pro最终版本
  • Springboot+vue开发的图书借阅管理系统项目源码下载-P0029
  • 学习 Python 之 Pygame 开发魂斗罗(十三)
  • 指针进阶(中)
  • C/C++获取文件名的方法(__FILE__,__builtin_FILE(),__BASE_FILE__)
  • 线程池的讲解和实现
  • linux编程──gcc和clang
  • 字节跳动测试岗面试记:二面被按地上血虐,所幸Offer已到手...
  • 5.多线程学习
  • 数据结构中的堆