数据结构java笔记

线性表

数组

物理地址连续、逻辑地址连续。数组长度是固定的,不能动态增长或缩小,数组中元素的类型相同(适合用于元素个数固定,且快速用下标访问)

ArrayList(动态数组)

物理地址连续、逻辑地址连续。长度可变,可以动态增长所缩小,可以存储不同类型的元素(适合用于元素个数不确定,需要动态增删,但需要预留一定空间)

链表

物理地址不连续、逻辑地址连续。长度可变,可以动态增长所缩小,可以存储不同类型的元素(适合用于插入删除频繁,但不需要按索引快速访问,不需要预留空间)

二叉树

  • 整棵树只有一个根

  • 每一个节点最多有两个孩子

  • 每个节点最多有一个父节点

二叉树本身的数据是毫无逻辑的

二叉搜索树

左节点小于根节点,右节点大于根节点

平衡二叉树

任意一颗子树的高度差不超过一。(维持平衡会消耗大量资源)

搜索平衡树

结合前两个的所有特点,log(n)

红黑树

image-20200727173500570

特点:

  • 所有的节点要么是红的,要么是黑的;·红黑树的根节点是黑色的;

  • 两个红色节点不能连接在一起。两个黑色的可以。

  • 所有的nil节点都是黑色的。(如果一个节点的左右节点都是空的,那这个节点就是nil节点。)

  • 在一棵红黑树中根节点节点到所有的nil节点所经历的黑色节点是一致的长度。

  • 综上:在红黑树中最长的分支的长度不会超过最短分支长度的二倍。

  • 所有红黑树是近似平衡的二叉树。

    TreeMap底层就是红黑树。

多叉树

B树(B-树)
  • B树是一种自平衡的多路查找树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键

    字范围的子结点;

  • 每个节点最多包含M-1个关键字,M是树的阶。

  • 每个节点包含关键字和指向子树的指针。

  • 查找、插入和删除的时间复杂度都为O(logn)。

  • 适用于文件索引系统,如操作系统的文件目录,数据库索引等。

B+Tree
  • 在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点

    中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;

  • 每个非叶子节点只存储关键字信息,不存储数据,所有数据都存储在叶子节点上。

  • 所有叶子节点使用链表连接,形成一个有序链表。

  • 查找时先在非叶子节点上查找,再到叶子节点上查找,搜索有可能在非叶子结点结束。

  • 插入和删除的时间复杂度仍为O(logn)。

  • 适用于文件存储系统,数据库索引系统等。

B*Tree
  • 在B+树基础上,为非叶子结点也增加链表指针。

  • 在B+树基础上,将结点的最低利用率从1/2提高到2/3;

  • 当一个非叶子节点满时,不直接分裂,而是将关键字转移到兄弟节点,再分裂。

  • 这种方式减少了树的分裂次数,提高了空间利用率。

  • 查找、插入和删除的时间复杂度仍为O(logn)。

  • 适用于文件系统和数据库索引等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++练级之路】【Lv.26】类型转换

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 一、C风格类型转换1.1 隐式类型转换1.2 显式类型转换 二、C风格类型转换2.1 static_cast2.2 dynamic_cast2.3…

【C++】—— 初识C++

【C】—— 初识C 一、什么是 C二、C 的发展历史三、C 版本更新四、C 的重要性五、C 在工作领域中的运用六、C 书籍推荐: 一、什么是 C C语言 是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要…

【eNSP模拟实验】单臂路由实现VLAN间通信

实验需求 如下图所示,辅导员办公室需要访问处在不同vlan的学生管理服务器的文件,那么如何实现两台终端相互通信呢?我们可以使用单臂路由的方式来实现。 单臂路由(router-on-a-stick)是指在路由器的一个接口上通过配置…

小型医疗门诊挂号收费后台系统源码 医院管理系统后台thinkphp内核源码(带微信登录)

源码简介: 好用的小型医疗门诊后台管理系统的源码,就是那种医院管理用的,核心是用thinkphp做的。这个系统源码啊,功能多,用起来也方便。它还支持第三方配置和微信登录。 这玩意儿是基于ThinkPHP搞出来的医疗门诊系统…

AJAX知识点(详解)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Flowable-流程图标与流程演示

BPMN 2.0是业务流程建模符号2.0的缩写。它由Business Process Management Initiative这个非营利协会创建并不断发展。作为一种标识,BPMN 2.0是使用一些符号来明确业务流程设计流程图的一整套符号规范,它能增进业务建模时的沟通效率。目前BPMN2.0是最新的…

持续集成01--Git版本管理及基础应用实践

前言 本系列文章旨在深入探讨持续集成/持续部署(Continuous Integration/Continuous Deployment, CI/CD)流程中的各个环节,而本篇将聚焦于Git版本管理及其基本应用。通过本文,读者将了解到Git的基本原理、安装配置、基本命令以及如…

高校动作捕捉与数字人开发实训室方案:助推高校开设虚拟数字人微专业

目前一些学校除了传统的实训室建设之外,部分院校会建设一些“微专业”,专业方向与AIGC以及虚拟数字人有关,通过引进一些虚拟数字人以及全身动作捕捉设备相关的产品和系统工具,进行设计课程方案,比如虚拟人直播&#xf…

Vue3学习体验(一)

搭建工程 使用vue-cli脚手架创建vue3工程 vue create vue3-app-vue-cliVue-cli官网:https://cli.vuejs.org/zh/guide/installation.html 使用vite搭建vue3工程 npm init表示临时的下载vite应用来创建vue3工程,工程名称为vue3-app-vite npm init vit…

银河麒麟高级服务器操作系统V10加固操作指南

1:检查系统openssh安全配置: 2:检查是否设置口令过期前警告天数: 3:检查账户认证失败次数限制: 修改/etc/pam.d/system-auth文件中deny的参数即可 4:检查是否配置SSH方式账户认证失败次数限制:

SAP DR创建借项凭证简介

DR创建借项凭证简介 创建借项凭证请求的详细步骤1. 进入创建销售订单的界面2. 选择销售凭证类型3. 输入销售组织数据4. 输入客户和参考数据5. 添加项目明细6. 检查和保存创建实际的借项凭证借项凭证后台配置定义凭证类型定义项目类别定义销售开票类型借项凭证请求的业务意义跟踪…

@RequestBody注解的使用及源码解析

前言 RequestBody 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解 RequestBody 注解 使用案例 1.自定义实体类 Data NoArgsConstructor AllArgsConstructor public class User {priv…

非对称加解密和签名

非对称加解密特点 一对密钥,公钥和私钥。私钥自己持有,公钥公开给通信的对方。 如果公钥用作加密,那么私钥用作解密。 如果私钥用做加密,那么公钥用作解密。 如果数据量少可用非对称加密算法直接加密。 如果数据量大,…

【双色转模拟调光磁吸灯应用方案】调光线性度好 调光频率1K以上都兼容 LED护眼教室黑板灯降压恒流驱动IC芯片FP7195

文章目录 前言 一、行业要求和痛点 1、设计空间小,双路调光调色不容易排布 2、磁场对调光的影响 二、FP7195如何解决这些要求和痛点 1、FP7195实际应用双色温调光电路框架 2、FP7195的转模拟调光技术 总结 前言 磁吸灯作为一种时尚、实用的家居装饰灯具,…

javaweb学习

javaweb就是实现浏览器和服务器之间的交互 1、服务器配置 Run->Edit Configurations,点击右上角的号,选择Tomcat Server的local: 选择server下的Configure...,在弹出的界面里点击有上角的号,选择自己解压的合适的t…

220V降压5ⅤIC-AH8652

220V降压至5V的IC - AH8652 在电子设计中,电压转换是一个常见的需求,尤其是在需要将高电压转换为低电压以供电给微电子设备时。AH8652是一款专为降压转换设计的集成电路,它能够将220V的交流输入电压转换为稳定的5V直流输出,非常适…

java基础之变量,类型的转换,跟着哔站尚硅谷自学笔记。

变量 变量的介绍以及使用 1.变量的数据类型:基本数据类型:4类8种整数:byte short int long 浮点数:float double字符型:char布尔型:boolean引用数据类型:类 数组 接口 枚举 注解2.概述&#xf…

gptpdf:使用大模型(如 GPT-4o)将 PDF 解析为 markdown。

今天给大家分享一个开源的项目, 使用视觉大语言模型(如 GPT-4o)将 PDF 解析为 markdown。 方法非常简单(只有293行代码),但几乎可以完美地解析排版、数学公式、表格、图片、图表等。 使用 GeneralAgent lib 与 OpenAI API 交互。…

C++笔试强训4

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 %o就是输出八进制的无符号数,0123,,以0开头,本来就是八进制,所以输出为123,123是十进制,转化为八进制就是173. 故选…

双向带头循环链表

一、概念 何为双向:此链表每一个节点的指针域由两部分组成,一个指针指向下一个节点,另一个指针指向上一个节点,并且两头的节点也是如此,头节点的下一个节点是尾节点,尾节点的上一个节点是头节点&#xff1b…