【数据结构大全】你想要的都有,数组、链表、堆栈、二叉树、红黑树、B树、图......

目录

1.概述

2.线性结构

3.时间复杂度

4.查找算法

5.树

6.图


1.概述

博主之前写过一个完整的关于数据结构的系列文章,一共十三篇,内容包含,数组、链表、堆栈、队列、时间复杂度、顺序查找、二分查找、二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树、大顶堆、小顶堆、图、DFS、BFS、最短路径算法。由于各篇文章分的比较散,本文中将对做一次清单式的总结,这是一份属于你的数据结构大全,请签收。

2.线性结构

文章链接:

数据结构(1)线性结构——数组、链表、堆栈、队列(介绍和JAVA代码实现)_线性结构中队列、数组、栈结构__BugMan的博客-CSDN博客

在线性数据结构中,数据元素之间存在一对一的关系,每个数据元素最多有一个直接前驱和一个直接后继。这种结构中,数据元素按照一定的顺序排列,形成一个线性序列。常见的线性数据结构包括数组、链表、栈和队列。

以下是一些常见的线性数据结构及其特点:

  1. 数组(Array)
    1. 数组是一种固定大小的线性结构,它在内存中分配一块连续的存储空间,用于存储相同类型的数据元素。
    2. 数组的访问是基于索引的,索引从 0 开始,通过索引可以快速访问数组中的元素。
    3. 插入和删除操作可能需要移动其他元素,因此在数组中执行这些操作可能较慢。
  2. 链表(Linked List)
    1. 链表是一种由节点组成的线性结构,每个节点包含数据元素和一个指向下一个节点的引用(或指针)。
    2. 链表分为单向链表和双向链表。双向链表的节点还包含一个指向前一个节点的引用。
    3. 链表的插入和删除操作相对较快,因为不需要移动其他元素,但访问元素可能较慢,需要遍历链表。
  3. 栈(Stack)
    1. 栈是一种后进先出(LIFO,Last In First Out)的线性结构,只能在栈顶进行插入和删除操作。
    2. 栈可以用于实现函数调用、表达式求值等场景,常用的操作包括压栈(push)和弹栈(pop)。
  4. 队列(Queue)
    1. 队列是一种先进先出(FIFO,First In First Out)的线性结构,元素只能从队列的一端插入,从另一端删除。
    2. 队列常用于实现任务调度、广度优先搜索等场景,常用的操作包括入队(enqueue)和出队(dequeue)。

3.时间复杂度

文章链接:

数据结构(2)时间复杂度——渐进时间复杂度、渐进上界、渐进下界__BugMan的博客-CSDN博客

时间复杂度是算法分析中用来衡量算法执行时间随输入规模增长而增长的速率。它通常用大O符号(O)来表示。时间复杂度不考虑精确的执行时间,而是关注算法运行时间的增长趋势。

时间复杂度分析的目的是衡量算法在不同规模的输入下的性能表现,从而可以选择更高效的算法来解决问题。

以下是一些常见的时间复杂度:

  1. O(1) - 常数时间复杂度
    1. 表示算法的执行时间与输入规模无关,无论输入多大,执行时间恒定。
    2. 典型的例子是访问数组中的特定元素、执行固定次数的操作等。
  2. O(log n) - 对数时间复杂度
    1. 表示算法的执行时间与输入规模的对数呈线性关系,随着输入规模增大,执行时间增长较慢。
    2. 典型的例子是二分查找,每次迭代将搜索范围缩小一半。
  3. O(n) - 线性时间复杂度
    1. 表示算法的执行时间与输入规模成线性关系,随着输入规模增大,执行时间也会线性增长。
    2. 典型的例子是对数组进行遍历、查找最大/最小值等。
  4. O(n log n) - 线性对数时间复杂度
    1. 表示算法的执行时间介于线性和平方之间,通常在大多数情况下,效率很高。
    2. 典型的例子是快速排序和归并排序。
  5. O(n^2) - 平方时间复杂度
    1. 表示算法的执行时间与输入规模的平方成正比,随着输入规模增大,执行时间迅速增长。
    2. 典型的例子是嵌套循环,例如选择排序和插入排序。
  6. O(n^k) - 多项式时间复杂度
    1. 表示算法的执行时间与输入规模的某个常数幂成正比,k 是一个常数。
    2. 典型的例子是冒泡排序等。
  7. O(2^n) - 指数时间复杂度
    1. 表示算法的执行时间随着输入规模呈指数级增长,通常效率非常低。
    2. 典型的例子是递归穷举算法。

4.查找算法

文章链接:

数据结构(3)基础查找算法——顺序查找、二分查找(JAVA版)__BugMan的博客-CSDN博客

查找算法,本系列包括两种:

  1. 线性查找(Sequential Search)
    1. 线性查找是最简单的查找算法,逐个遍历数据集合,比较每个元素是否与目标元素相等。
    2. 时间复杂度:O(n)(最坏情况下需要遍历所有元素)。
  2. 二分查找(Binary Search)
    1. 二分查找要求数据集合已排序。它将数据集合一分为二,然后与中间元素比较,根据比较结果确定目标元素在哪一半中,然后递归进行查找。
    2. 时间复杂度:O(log n)(每次比较都将数据集合减半)。
    3. 仅适用于有序数据。

5.树

树形结构里,本系列包含:

  1. 二叉树
  2. 二叉搜索树
  3. 平衡二叉树
  4. 红黑树
  5. B树
  6. B+树

文章链接:

数据结构(4)树形结构——二叉树(概述、前序、中序、后序、层序遍历JAVA实现)_树形图的结点顺序__BugMan的博客-CSDN博客

数据结构(5)树形结构——二叉搜索树(JAVA代码实现)_树形结构搜索__BugMan的博客-CSDN博客

数据结构(6)树形结构——平衡二叉树(JAVA代码实现)_java 平衡二叉树__BugMan的博客-CSDN博客

数据结构(7)树形结构——红黑树(概念、插入过程、删除过程)_红黑树1的插入和删除__BugMan的博客-CSDN博客

数据结构(8)树形结构——B树、B+树(含完整建树过程)_b+树结构__BugMan的博客-CSDN博客

数据结构(9)树形结构——大顶堆、小顶堆__BugMan的博客-CSDN博客

  • 二叉树: 二叉树是一种树状结构,每个节点最多有两个子节点,称为左子节点和右子节点。它的节点可以为空,或者包含一个值和指向左右子节点的指针。二叉树在很多领域中有广泛的应用,如表达式求值、搜索和排序。

  • 二叉搜索树: 二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树,对于每个节点,其左子树的所有节点值都小于该节点值,右子树的所有节点值都大于该节点值。这种有序性质使得二叉搜索树在查找、插入和删除操作上具有高效性能。

  • 平衡二叉树: 平衡二叉树是一种特殊的二叉搜索树,其左右子树的高度差(平衡因子)不超过某个固定值。这保证了树的高度保持在较小的范围内,从而保证了查找、插入和删除操作的平均时间复杂度为 O(log n)。

  • 红黑树: 红黑树是一种自平衡的二叉搜索树,它通过在插入和删除操作中进行颜色变换和旋转来保持树的平衡。红黑树的特点包括:每个节点是红色或黑色,根节点是黑色,每个叶子节点(NIL 节点)都是黑色,红色节点的子节点必定为黑色,从任一节点到其每个叶子的所有路径都包含相同数量的黑色节点。

  • B树: B树(B-tree)是一种多叉树,用于存储大量的有序数据。B树的特点包括:每个节点可以包含多个子节点,一个节点可以包含多个关键字,子节点的关键字范围和父节点的关键字范围有重叠,保证了树的平衡性和高效的查找性能。

  • B+树: B+树(B+ tree)是一种在B树基础上进行了优化的数据结构,主要用于磁盘存储和数据库索引。与B树不同,B+树的所有关键字都出现在叶子节点中,非叶子节点只包含指向叶子节点的指针。这种结构可以提高磁盘存储的效率,同时适合范围查询。

6.图

图,在本系列种包含:

  1. 图的存储和表示
  2. 图的深度遍历和广度遍历
  3. 图的最短路径算法
  4. 最小生成树

文章链接:

数据结构(10)图的概念、存储_数据结构中图的存储概念__BugMan的博客-CSDN博客

数据结构(11)图的遍历,DFS、BFS的JAVA实现_java实现bfs和dfs__BugMan的博客-CSDN博客

数据结构(12)Dijkstra算法JAVA版:图的最短路径问题_dijkstra算法求解最短路径例题java__BugMan的博客-CSDN博客

数据结构(3)基础查找算法——顺序查找、二分查找(JAVA版)__BugMan的博客-CSDN博客

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

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

相关文章

电脑不安装软件,怎么将手机文件传输到电脑?

很多人都知道,AirDroid有网页版(web.airdroid.com)。 想要文件传输,却不想在电脑安装软件时,AirDroid的网页版其实也可以传输文件。 然而,要将文件从手机传输文件到网页端所在的电脑时,如果按…

JavaIO流

JavaIO流 一、概念二、File类三、File类的使用1、File文件/文件夹类的创建2、File类的获取操作3、File类判断操作 - boolean4、File类对文件/文件夹的增删改5、File类的获取子文件夹以及子文件的方法 四、Java中IO流多种维度的维度1、按照流向 - Java程序2、按照流的大小分类3、…

LInux之chrony服务器

目录 场景 重要性 LInux的两个时钟 硬件时钟 系统时钟 NTP协议 Chrony介绍 定义 组成 --- chronyd和chronyc 安装与配置 安装 Chrony配置文件分析 同步时间服务器 chronyc命令 chronyc sources输出分析 其它命令 查看时间服务器的状态 查看时间服务器是否在线 …

18-使用钩子函数判断用户登录权限-登录前缀

钩子函数的两种应用: (1). 应用在app上 before_first_request before_request after_request teardown_request (2). 应用在蓝图上 before_app_first_request #只会在第一次请求执行,往后就不执行, (待定,此属性没调试通过) before_app_request # 每次请求都会执行一次(重点…

服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践

作者:王夕宁、 刘强、 华相 公司介绍 丽迅物流是百丽旗下专注于时尚产业、为企业提供专业物流及供应链解决方案的服务商。其产品服务主要包括城市落地配、仓配一体、干线运输及定制化解决方案。通过自研智能化物流管理平台,全面助力企业合作集约化发展…

玩转软件|钉钉个人版内测启动:AI探索未来的工作方式

目录 前言 正文 AI为核心,个人效率为王! 指令中心,解锁AI技巧! 灵感Store,探索更多可能! 未来的AI,即将问世! 个人内测体验 前言 重磅消息:钉钉个人版在8月16日正…

Android实现监听APP启动、前台和后台

Android 实时监听APP进入前台或后台 前言 在我们开发的过程中,经常会遇到需要我们判断app进入后台,或者切换到前台的情况。比如我们想判断app切换到前台时,显示一个解锁界面,要求用户输入解锁密码才能继续进行操作;我…

不同子网络中的通信过程

从输入www.baidu.com经历了什么 一、DNS(网址->IP) 二、ARP(IP->MAC) A->B:有数据发送,数据封装ip之后发现没有主机B的mac地址。然后ARP在本网段广播:检查目标地址和源地址是否在同一…

抖音矩阵,矩阵账号开发,抖音矩阵源码搭建

抖音矩阵,矩阵账号开发,抖音矩阵源码搭建: 1、账号矩阵系统搭建首先需要注意的是支持多平台,多账号,可以实现流量互通,账号矩阵多个账号联动形成账号矩阵形式分发开发。 2、账号矩阵系统需要可以查看分发…

Node与Express后端架构:高性能的Web应用服务

在现代Web应用开发中,后端架构的性能和可扩展性至关重要。Node.js作为一个基于事件驱动、非阻塞I/O的平台,以及Express作为一个流行的Node.js框架,共同构建了高性能的Web应用服务。 在本文中,我们将深入探讨Node与Express后端架构…

基于梯度算法优化的BP神经网络(预测应用) - 附代码

基于梯度算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于梯度算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.梯度优化BP神经网络2.1 BP神经网络参数设置2.2 梯度算法应用 4.测试结果:5.Matlab代码 摘要…

Bootstrap 源代码目录结构一览

目录 前言 Bootstrap 目录结构 Bootstrap 内容简介 Bootstrap 编译文件 CSS文件 | CSS 文件功能对比与清单 JS文件 | JS 文件功能对比与清单 Bootstrap 源码码目录 | 资源清单 前言 Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Ot…

Visual Studio编译出来的程序无法在其它电脑上运行

在其它电脑(比如Windows Server 2012)上运行Visual Studio编译出来的应用程序,结果报错:“无法启动此程序,因为计算机中丢失VCRUNTIME140.dll。尝试重新安装该程序以解决此问题。” 解决方法: 属性 -> …

ConsoleApplication815项目(直接加载+VEH Hook Load)

上线图 ConsoleApplication815.cpp #include <iostream> #include<Windows.h> #include "detours.h" #include "detver.h" #pragma comment(lib,"detours.lib")#pragma warning(disable:4996)LPVOID Beacon_address; SIZE_T Beacon…

机器视觉工程师永不为奴,他们是肯干肯出差肯加班肯拼命肯被使唤肯被叼

​ 永不为奴&#xff0c;为什么这样呐喊&#xff0c;真的很难做到。我们职业机器视觉工程师&#xff0c;本身职业具有一大特点就是专业性。 但是我们机器视觉工程师是专业技术绝不苟同于不是技术人员言语&#xff0c;我们很专业。 肯出差&#xff1a; 设备去那里&#xff0c;…

C#,《小白学程序》第七课:列表(List)应用之一“编制高铁车次信息表”

1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary>…

【优化算法】Python实现面向对象的遗传算法

遗传算法 遗传算法(Genetic Algorithm)属于智能优化算法的一种&#xff0c;本质上是模拟自然界中种群的演化来寻求问题的最优解。与之相似的还有模拟退火、粒子群、蚁群等算法。 在具体介绍遗传算法之前&#xff0c;我们先来了解一些知识&#x1f9c0; DNA&#xff1a; 携带有…

性能优化之分库分表

1、什么是分库分表 1.1、分表 将同一个库中的一张表&#xff08;比如SPU表&#xff09;按某种方式&#xff08;垂直拆分、水平拆分&#xff09;拆分成SPU1、SPU2、SPU3、SPU4…等若干张表&#xff0c;如下图所示&#xff1a; 1.2、分库 在表数据不变的情况下&#xff0c;对…

图像处理 信号处理板 设计原理图:367-基于zynq XC7Z100 FMC接口通用计算平台

基于zynq XC7Z100 FMC接口通用计算平台 一、板卡概述 板卡由SoC XC7Z100-2FFG900I芯片来完成卡主控及数字信号处理&#xff0c;XC7Z100内部集成了两个ARM Cortex-A9核和一个kintex 7的FPGA&#xff0c;通过PL端FPGA扩展FMC、光纤、IO等接口&#xff0c;PS端ARM扩展网络、USB、R…

exchange实战

未得到exchange服务器权限 确定exchange服务器ip地址 setspn -T example.domain.com -F -Q */* | findstr exchangeMailSniper 爆破用户名和密码 爆破Exchange邮箱用户名密码&#xff0c;为了防止账号被锁定&#xff0c;所以我们使用密码喷洒攻击&#xff0c;即只使用一个密…