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

news2024/11/24 2:41:36

目录

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.coloradmin.cn/o/942124.html

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

相关文章

【Android-Flutter】我的Flutter开发之旅

目录: 0、文档:1、在Windows上搭建Flutter开发环境(1)[使用中国镜像(❌详细看官方文档)](https://docs.flutter.dev/community/china)(2)[下载最新版Flutter SDK(已包含Dart)](https://docs.flu…

从项目中突显技能:在面试中讲述你的编程故事

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

华为数通方向HCIP-DataCom H12-821题库(单选题:141-160)

第141题 Router-LSA 能够描述不同的链路类型,不属于Router LSA 链路类型的是以下哪一项? A、Link Type 可以用来描述到末梢网络的连接,即 SubNet B、Link Type 可以用来描述到中转网络的连接,即 TranNet C、Link Type 可以用来描述到另一…

16.CSS菜单悬停特效

效果 源码 <!DOCTYPE html> <html> <head> <title>Creative Menu Item Hover Effects</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body><section><…

Vue项目中app.js过大,导致web初始化加载过慢问题

1、删除多余不需要的库&#xff1a; npm uninstall xxx 如例如moment库文件是很大的可以直接放到index.html文件直接CDN引入 2、修改/config/index.js配置文件&#xff1a;将productionGzip设置为false ​ 3、设置vue-router懒加载 懒加载配置&#xff1a; ​ 非懒加载配置&…

winpe使用AOMEI Backupper备份磁盘和操作系统

winpe系统说明 我们可以将winpe制作成再u盘启动&#xff1b; 我们可以在winpe上安装备份磁盘和操作的软件AOMEI Backupper&#xff1b; 磁盘备份和系统备份软件 AOMEI Backupper 直接双击exe即可 选择磁盘备份 点击添加磁盘 选择磁盘&#xff0c;点击添加 点击开始备份&…

django中使用websocket

python本身只支持http协议 使用websocket需要下载第三方库 pip install -U channels 需要在seting.py里配置&#xff0c;将我们的channels加入INSTALLED_APP里。 INSTALLED_APPS ( django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, …

扩散模型实战(七):Diffusers蝴蝶图像生成实战

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#xf…

ASUS华硕天选4笔记本电脑FA507XV原厂Windows11系统22H2

天选四FA507X原装系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件 华硕电脑管家、奥创控制中心等预装程序&#xff0c;恢复出厂状态W11 链接&#xff1a;https://pan.baidu.com/s/1SPoFW7wR5KawGu-yMckNzg?pwdayxd 提取码&#xff1a;ayxd

听会议整理的几个问题整理

听会议整理的几个问题整理 AR与NAR正样本和负样本数据蒸馏 AR与NAR 正样本和负样本 对于ar 和nar ar虽然从一个人来看是串行的&#xff0c;但是可以对用户进行并行 nar对于一个人的需求是并行的。但是对于多用户是无法并行的 所以ar并非一定效率低 数据蒸馏

CUDA小白 - NPP(2) -图像处理-算数和逻辑操作

cuda小白 原文链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xff0c…

手机无人直播软件有哪些,又有哪些优势?

如今&#xff0c;随着智能手机的普及和移动互联网的发展&#xff0c;手机无人直播成为了一个炙手可热的领域。手机无人直播软件为用户提供了便捷、灵活的直播方式&#xff0c;让更多商家人能够实现自己的直播带货的梦想。接下来&#xff0c;我们将探讨手机无人直播软件有哪些&a…

解密算法与数据结构面试:程序员如何应对挑战

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

el-upload调用内部方法删除文件

从Element UI 的官方文档中&#xff0c; Upload 上传组组件提供了on-remove和before-remove的文件删除的钩子属性&#xff08;回调方法名&#xff09;&#xff0c;但如何调用组件删除方法&#xff08;让该方法删除本地上传文件列表以及触发这两个钩子&#xff09;并无相关说明。…

解锁安全高效办公——私有化部署的WorkPlus即时通讯软件

在当今信息时代&#xff0c;高效的沟通与协作对于企业的成功至关重要。然而&#xff0c;随着信息技术的发展&#xff0c;保护敏感信息和数据安全也变得越来越重要。为了满足企业对于安全沟通和高效办公的需求&#xff0c;我们隆重推出私有化部署的WorkPlus即时通讯软件&#xf…

Marin说PCB之如何使用CAM350做Gerber compare ?

最近小编在追一部东北武侠喜剧&#xff08;鹊刀门传奇&#xff09;&#xff0c;大部分人员都是乡村爱情的人员演的&#xff0c;这部剧真的是超级搞笑&#xff0c;小编我以人格担保要是不搞笑的话&#xff0c;你来找我。 正当小编我周日在家里追剧的时候&#xff0c;手机上弹出了…

Git仓库简介

1、工作区、暂存区、仓库 工作区&#xff1a;电脑里能看到的目录。 暂存区&#xff1a;工作区有一个隐藏目录.git&#xff0c;是Git的版本库&#xff0c;Git的版本库里存了很多东西&#xff0c;其中最重要的就是称为stage&#xff08;或者叫index&#xff09;的暂存区&#xf…

【技术】SpringBoot Word 模板替换

SpringBoot Word 模板替换 什么是 Word 模板替换如何实现 Word 模板替换 什么是 Word 模板替换 模板一般是具有固定格式的内容&#xff0c;其中一部分需要替换。Word 模板通俗的讲是以 Word 的形式制作模板&#xff0c;固定格式和内容&#xff0c;然后将其中的一部分数据替换掉…

第 1 章 绪论 (三元组)

1. 示例代码&#xff1a; 1&#xff09;status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值…

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

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