数据结构详解

数据结构

线性结构

  • 一个有序数据元素的集合
  • 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的

非线性结构

  • 线性结构的对立面

数组

定义

数组是一种线性数据结构,用于存储相同类型的元素。
每个元素都有一个唯一的索引,通过索引可以快速访问数组中的元素。

特点

  • 数组的长度是固定的,一旦创建就不能更改。

  • 元素在内存中是连续存储的。

  • 支持随机访问,通过索引可以直接访问数组中的任意元素。

链表

定义

链表是一种线性数据结构,由节点(Node)组成,每个节点包含数据和一个指向下一个节点的指针。

特点

  • 链表允许动态分配内存空间,大小不固定。

  • 节点在内存中可以不连续存储,通过指针连接。

  • 插入和删除节点的操作效率高,但访问效率较低。

队列(Queue)

定义

队列是一种基于先进先出(First In First Out,FIFO)原则的线性数据结构。

特点

  • 主要操作包括入队(Enqueue)和出队(Dequeue)

  • 只能在队尾入队,在队头出队

  • 常用于任务调度、广度优先搜索等场景

栈(Stack):

定义

栈是一种基于后进先出(Last In First Out,LIFO)原则的线性数据结构。

特点

  • 主要操作包括压栈(Push)和出栈(Pop)

  • 只能在栈顶进行插入和删除操作

  • 常用于跟踪方法调用、表达式求值、内存管理等场景

树(Tree):

定义

  • 树是一种非线性的数据结构,由节点(Node)和边(Edge)组成。

  • 每个节点包含数据元素,而边定义了节点之间的关系。

  • 树的一个特殊节点称为根(Root),根节点没有父节点,其他节点都有一个父节点。

  • 每个节点可以有零个或多个子节点,同一层级上的节点称为兄弟节点。

  • 树的常见类型包括二叉树、二叉搜索树、平衡树、红黑树等。

二叉树(Binary Tree)

  • 定义:每个节点最多有两个子节点,分左右
  • 遍历:
    • 前序:中左右(根左右)
    • 中序:左中右(左根右)
    • 后序:左右中(左右根)

二叉搜索树(Binary Search Tree)

  • 定义:
    • 二叉搜索树是一种有序的二叉树
    • 对于每个节点,其左子树的所有节点值小于节点本身的值,右子树的所有节点值大于节点本身的值
  • 查询
    • 平均时间的时间复杂度为 O(log n),最差情况为 O(n)

AVL 树(Balanced Binary Search Tree)

  • 定义: AVL 树是一种自平衡的二叉搜索树,它确保任意节点的左右子树的高度差不超过 1
  • 查询:时间复杂度为 O(log n)
  • 插入、删除:
    • 由于插入或删除导致左右子树的高度差大于1,此时需要旋转某些节点调整树高度,使其再次达到平衡状态
    • 左旋:
    • 右旋:

红黑树(Red-Black Tree)

  • 定义: 红黑树是一种自平衡的二叉搜索树,通过在每个节点上增加额外的颜色信息(红色或黑色),来确保树的平衡

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

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

相关文章

java面向对象的封装Triangle

(1)定义三角形类Triangle, * - 声明实例变量a,b,c,代表三角形三条边,全部私有化private, * - 提供每条边的get方法, * - 提供public void setBases(double a, double b, double c):要…

【Redis(3)】深入理解Redis三种高可用方案,以做出明智的选择

通过上一篇文章详细介绍了Redis的持久化方式RDB和AOF配置,这一篇主要介绍Redis的几种高可用方案。 Redis作为一个成熟的远程字典服务,提供了三种常用的高可用设计方案,Redis的每种高可用性方案都各有千秋,选择时需要细致考虑业务…

JavaSE基础:数值比较

数值比较 目录 数值比较 等值判断 和 的区别 重写 equals 方法 数值比较 compareTo 方法 compare 方法 等值判断 Object 类实现了 equals 方法 ,用于比较两个数据元素是否相等。 浮点类型由于精度丢失问题,进行等值判断常出现错误。如果有需求推…

【加密周报】中东“惊雷”炸响币圈!比特币减半成功完成,市场情绪已被提前消化!中美突传USDT重磅消息!

周五(4月19日),比特币经历惊魂一刻,伊朗核设施所处的中部城市伊斯法罕惊传爆炸,叙利亚与伊拉克也都传来爆炸声响,中东全面战争与核武攻击威胁触发加密市场恐慌情绪。比特币一度下探59600美元。但随后伊朗强调核设施未受损&#xf…

组件安全(Solr、Shiro、Log4j、Jackson、FastJson、XStream)

Solr 主要基于HTTP和 Apache Lucene 实现的全文搜索服务器。 特征&#xff1a;图标识别 端口&#xff1a;8393 CVE-2019-0193&#xff08;远程命令执行漏洞&#xff09; 漏洞版本&#xff1a;Apache Solr < 8.2.0 利用条件&#xff1a; Apache Solr 的 DataImportHandler 启…

数据结构_带头双向循环链表

List.h 相较于之前的顺序表和单向链表&#xff0c;双向链表的逻辑结构稍微复杂一些&#xff0c;但是在实现各种接口的时候是很简单的。因为不用找尾&#xff0c;写起来会舒服一点。&#xff08;也可能是因为最近一直在写这个的原因&#xff09; #pragma once #include<std…

二维码门楼牌管理应用平台建设:构建智能社区治理新模式

文章目录 前言一、二维码门楼牌管理应用平台的意义二、走访日志功能的重要性三、走访日志功能的具体应用四、走访日志功能的优势五、结语 前言 在数字化浪潮下&#xff0c;社区管理正面临着前所未有的机遇与挑战。二维码门楼牌管理应用平台的建设&#xff0c;不仅为社区治理提…

代码随想录训练营Day 27|Python|Leetcode|122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获…

fastjson转换json时默认将属性第一个字母转小写

描述&#xff1a; 我新建了一个实体类&#xff0c;但是实体类的首字母是大写的&#xff0c;但是使用fastjson后打印的&#xff0c;Json字符串首字母却是小写的&#xff0c;这是fastjson的一个bug 实体类&#xff1a; Json字符串&#xff1a; 解决方法&#xff1a; 一、使…

HoloLens2的Unity应用在电脑上发布成安装包,然后通过wifi安装到设备

一、VS工程中的鼠标右键 二、发布——>创建应用程序包 三、选择【旁加载】 四、选择签名方法&#xff1a; 五、选择和配置包 六、创建完毕 七、网络连接设备 八、登录设备 九、安装app

六边形酷科技特效单页源码

源码介绍 基于canvas画布绘制多个六边形追踪鼠标&#xff0c;科技感的几何图形酷炫动画特效&#xff0c; 单页html源码&#xff0c;可以做网站动态背景&#xff0c;喜欢的朋友可以拿去 效果截图 完整源码 <!doctype html> <html> <head> <meta charset…

基于Kubernetes集群1.27.3构建ElasticSearch-7集群

基于Kubernetes集群构建ES集群 作者:行癫(盗版必究) 一:环境准备 1.Kubernetes集群环境 节点地址Kubernetes-Master10.9.12.206Kubernetes-Node-110.9.12.205Kubernetes-Node-210.9.12.204Kubernetes-Node-310.9.12.203DNS服务器10.9.12.210代理服务器10.9.12.209NFS存储1…

java之逻辑运算符

在java中&#xff0c;逻辑与的表示方法 && 逻辑或的表示方法 || 逻辑非为! 除了逻辑非是一元运算符之外&#xff0c;其他的都是二元运算符。 逻辑运算符的值必须是boolean型 假定两个变量&#xff0c;a和b&#xff0c;true用对表示&#xff0c;fals用错表示 a对&…

项目7-音乐播放器3(删除模块+播放音乐模块设计)

1.播放音乐模块设计 1.1 请求响应设计 请求&#xff1a; { get, /music/get?pathxxx.mp3 } 响应&#xff1a; { 音乐数据本身的字节信息 } 1.2 后端代码 1. Files.readAllBytes(String path) : 读取文件中的所有字节&#xff0c;读入内存 &#xff…

玄子Share-揭开5G神秘面纱

玄子Share-揭开5G神秘面纱 移动通信发展历程 在移动通信领域&#xff0c;常听到3G、4G的术语 G是Generation的简写&#xff0c;每一个G&#xff0c;都代表了移动通信的一个发展阶段&#xff0c;也是一个时代移动通信技术从 20 世纪 80 年代诞生开始&#xff0c;历经这 30 多…

SpringBoot集成FTP

1.加入核心依赖 <dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency> 完整依赖 <dependencies><dependency><groupId>org.springfra…

深度学习配置环境AllInOne

总结深度学校ubuntu环境配置 目录 0.前提工作0. nvidia驱动安装1.CudaTookits安装2. cuDNN安装3.conda安装3.0 conda基本概念3.1 系统python版本确认3.2 miniconda安装3.3 ~~conda迁移~~3.4 附4.pytorch安装5. git安装5.1 git命令行安装5.2 git-gui安装0.前提工作 安装顺序:n…

蛋白质亚细胞定位预测(生物信息学工具-017)

直奔主题&#xff0c;下面这张表图怎么制作&#xff0c;一般都是毕业论文hh&#xff0c;蛋白质的亚细胞定位如何预测&#xff1f; 01 方法 https://wolfpsort.hgc.jp/ #官网小程序&#xff0c;简单好用&#xff0c;不用R包&#xff0c;python包&#xff0c;linux程序&#x…

微服务使用SockJs+Stomp实现Websocket 前后端实例 | Vuex形式断开重连、跨域等等问题踩坑(一)

大家好&#xff0c;我是程序员大猩猩。 之前几篇文章&#xff0c;我们讲了Spring Cloud Gateway的轻量级实现&#xff0c;Nginx的配置概念与实现&#xff0c;如以下往期文章。 轻量级的Spring Cloud Gateway实践&#xff0c;实现api和websocket转发轻松实现Nginx的HTTP与WebS…

基于Springboot+Vue的Java项目-网上超市系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…