【数据结构】数据结构整体大纲

news2025/2/25 0:27:38

数据结构用来干什么的?很简单,存数据用的。 (这篇文章仅介绍数据结构的大纲,详细讲解放在后面的每一个章节中,逐个击破)

那为什么不直接使用数组、集合来存储呢 ——> 如果有成千上亿条数据呢?假如说:有一块连续的40w个字节大小的数据被存储在内存空间当中,请问,这个时候我需要提取出其中的某一条数据,不方便进行操作。

数组有个问题,数据一旦太大,如果想在内存中找到特定的空间很难,而我们将数据零散的四处分配在不同的空间中,所以我们采用了数据结构的方式进行数据的存储,然后中间通过指针的方式将这些数据串起来。创建之后,从此以后,这些数据形成了一个链条,所以,当我们知道一个链条的起始点,一个一个链接中的节点往下找,便可以找到这个链条其中的每一个数据,这便是数据结构的本质,这个链条被称为 链表。
请添加图片描述
根据上图的逻辑,我们现在要存储 10 20 30 40 50 60 六个数据使它们形成一个链表,该怎么写呢?

struct node
{
    int d;
    struct node *next;
};

struct node *p1 = (struct node *)malloc(sizeof(struct node));
p1->d = 10;

struct node *p2 = (struct node *)malloc(sizeof(struct node));
p2->d = 20;
p1->next = p2;

struct node *p3 = (struct node *)malloc(sizeof(struct node));
p3->d = 30;
p2->next = p3;
p1->next->next->d;  // 30

//如此以往,环环相扣,首位相连

这便是数据结构的本质与基础,很简单吧。数据结构一点都不难,只要能够理解数据之间串联方式的内在逻辑,再看数据结构的各种方式不过是根据以上图基础的变种而已。它们的目的都是 链接零散在内存空间中数据 而存在的,用一些具有规则、规律的方式或者结构,对数据进行存储、插入、删除、查找、更新的过程。

什么是数据

  • 广义:你在计算机里看到的一切 —— 现实生活中的一切事物皆是数据。
  • 狭义:代码产生的一系列数据:int a = 10; ——> a是数据,10也是数据。

什么是结构?

  • 指的是关系 ——> 存储关系,逻辑关系,算法关系等。

什么是数据结构?

  • 研究数据与数据之间的关系。例如:

关系:

  1. 研究分析 数据 与 数据之间的关系 ----------------------------> 逻辑关系(结构):表示数据运算之间的抽象关系(如邻接关系、从属关系等),按每个数据元素可能具有的 直接前驱数直接后继数 将逻辑结构分为“线性结构”和非线性结构两大类。
    1.1 集合
    数据元素除了“同属于一个集合”外,无其他关系。例子: 鸡,鸭,鹅 属于 —> 禽类
    1.2 线性结构
    指数据元素之间存在 一个对一个 的关系,形成有序的集合。这样结构中,每个数据元素都有一个明确的 前驱后继,除了第一个元素没有前驱,最后一个元素没有后继,就像一辆火车一样一节节车厢链接在一起。
    1.3 树状结构
    呈现一个对多个的关系(自上而下)。
    1.4 图形结构
    呈现多对多的关系(人工智能)。
    例如:脑神经,数据元素呈现多对多的关系。
  2. 将这种关系保存在计算机中 -------------------------------------> 存储关系(结构) :存储结构是数据的逻辑结构在计算机存储器中的映射。存储结构是通过计算机语言所编制的程序来实现的。
    2.1 顺序存储
    将这些数据依次存储在一块连续的空间中(数组)
    2.2 链式存储
    给每一个数据单独申请一个独立的空间,利用指针建立它们之间的关系。(构造数据用结构体形式去实现)
  3. 通过某种手段,修改在计算机中保存的关系 ----------------> 算法(狭义:增删改查)
    3.1 插入 删除 修改 替换 排序 (增删改查操作)

数据结构是计算机科学的核心内容,主要研究如何高效地组织、存储和操作数据。不同的数据结构适用于不同的应用场景,可以显著提高程序的性能和算法的效率。这篇文章是数据结构的完整学习大纲,涵盖了基础概念、常用数据结构及其相关算法、应用场景等内容。学习数据结构时,建议按照从简单到复杂的顺序,由浅入深逐步深入理解每种结构的实现和应用。

数据结构的作用:

  • 提高程序的可维护性和扩展性:数据结构通过抽象化数据的存储和操作,使程序更易维护和扩展。

解决特定领域的问题:

  • 数据结构广泛应用于操作系统、数据库、网络、人工智能、大数据等领域,解决特定问题。比如说:B+树 用于数据库索引,图结构 用于建模网络。
  1. 数据结构的定义和分类:高效的存储与操作数据
    1.1 数据结构提供了一种合理的方式来组织和存储数据,以支持各种数据操作(如插入、删除、查询、排序等)。
    1.2 例如:使用 数组 可以快速按索引访问数据。使用 哈希表 实现快速查找。
  2. 数据结构与算法的关系
  3. 时间复杂度与空间复杂度
    3.1 大 O 表示法
    3.2 最优、最坏、平均复杂度分析;合理选择数据结构可以显著降低算法的时间复杂度。
    3.3 例如,使用 实现优先队列,使插入和删除的时间复杂度从 O(n) 降为 O(log n)。
  4. 基本操作:插入、删除、查找、更新。

数据结构整体大纲

数据结构的分类

(1)线性数据结构

  • 数据元素按线性顺序排列。
  • 数据元素之间存在 一个对一个 的关系,形成有序的集合。这样结构中,每个数据元素都有一个明确的 前驱后继,除了第一个元素没有前驱,最后一个元素没有后继,就像一辆火车一样一节节车厢链接在一起。
  • 常见例子:
    • 数组(Array)
    • 链表(Linked List):单向链表、单向循环链表、双向链表、双向循环链表、内核链表。
    • 栈(Stack)
    • 队列(Queue)
    • 双端队列(Deque)

(2)非线性数据结构

  • 数据元素之间不一定是线性关系,可以是层次关系或网状关系。
  • 常见例子:
    • 树(Tree)
    • 图(Graph)

(3)哈希结构

  • 通过哈希函数将数据映射到特定位置,支持快速查找和插入。
  • 常见例子:
    • 哈希表(Hash Table)

(4)高级数据结构

  • 基于基础数据结构的抽象或优化。
  • 常见例子:
    • 堆(Heap)
    • 并查集(Union-Find)
    • 字典树(Trie)
    • 跳表(Skip List)
    • B 树与 B+ 树

各数据结构的详细介绍

1. 数组(Array)
作用:存储固定大小的连续数据,支持随机访问。
解决的问题:快速按索引访问数据。
应用场景

  • 实现栈、队列。
  • 存储二维或多维矩阵数据(如图像处理)。
  • 动态数组(如 C++ 的 std::vector 和 Python 的 list)。

2. 链表(Linked List)
作用:通过节点链式存储数据,支持动态插入和删除。
解决的问题:在不知道数据大小或需要频繁插入/删除时提供灵活的存储方式。
种类

  • 单向链表、单向循环链表、双向链表、双向循环链表、内核链表。

应用场景

  • 内存管理(如空闲内存块管理)。
  • LRU 缓存(使用双向链表和哈希表实现)。
  • 实现队列和其他数据结构。

3. 栈(Stack)
作用:后进先出(LIFO)的数据结构。
解决的问题:用于处理具有递归或嵌套结构的数据。
常见操作:push(入栈),pop(出栈),peek(查看栈顶元素)。
应用场景

  • 函数调用栈(保存函数调用上下文)。
  • 括号匹配问题(如验证表达式合法性)。
  • 表达式求值(如中缀转后缀表达式)。

4. 队列(Queue)
作用:先进先出(FIFO)的数据结构。
解决的问题:适用于需要按顺序处理任务的场景。
种类

  • 普通队列、双端队列(Deque)、优先队列。

应用场景

  • 任务调度(如操作系统中的进程调度)。
  • 广度优先搜索(BFS)。
  • 实现消息队列(如 RabbitMQ)。

5. 树(Tree)
基本概念:节点、根、叶子、子树、高度、深度。
作用:层次化存储数据,便于快速查找、插入和删除。
解决的问题:高效存储和操作有层次关系的数据。
种类

  • 二叉树、二叉搜索树(BST)、平衡二叉树(如 AVL 树、红黑树)、堆。

应用场景

  • 文件系统(如目录结构)。
  • 数据检索(如表达式树)。
  • 数据库索引(如 B+ 树)。

6. 图(Graph)
基本概念:存顶点、边、权重、度。
作用:存储网状关系的数据。
解决的问题:建模网络、路径规划等问题。
常见表示

  • 邻接矩阵、邻接表。
  • 有向图 vs 无向图。

应用场景

  • 网络路由(如最短路径算法:Dijkstra)。
  • 社交网络分析。
  • 电路设计、推荐系统。

7. 哈希表(Hash Table)
基本概念:哈希函数,键值对存储。
作用:通过哈希函数支持快速插入和查找。
解决的问题:快速检索键值对。
冲突解决方法

  • 链地址法、开放地址法。

应用场景

  • 缓存(如 LRU 缓存)。
  • 数据去重。
  • 实现字典(如 Python 的 dict)。

8. 堆(Heap)
作用:动态维护最大值或最小值。
解决的问题:快速找到优先级最高的元素。
种类

  • 大顶堆、小顶堆。
  • 完全二叉树。

应用场景

  • 优先队列。
  • Top-K 问题(如实时流数据分析)。
  • 堆排序。

高级数据结构

9. 并查集(Union-Find)
作用:解决连通性问题。
解决的问题:动态合并集合并查询集合所属。
优化

  • 路径压缩、按秩合并。

应用场景

  • 网络连通性。
  • Kruskal 最小生成树算法。

10. 字典树(Trie)
作用:高效存储和检索字符串集合。
解决的问题:快速搜索前缀匹配数据。

应用场景

  • 搜索引擎的自动补全。
  • 拼写检查。
  • 字符串去重。

11. 平衡树
作用:插入、删除、旋转操作,性质与平衡维护数据。
解决的问题:性质与平衡维护;应用:STL 的 mapset

应用场景

  • AVL 树。
  • 红黑树。

12. 跳表(Skip List)
作用:通过引入多级索引(多层链表)以提高操作效率,是平衡树(如 AVL 树、红黑树)的高效替代方案,能够在有序数据集合中快速进行查找、插入和删除操作。
解决的问题:时间复杂度分析:O(log n)

应用场景

  • 数据库索引。
  • 有序集合操作。

13. B 树与 B+ 树
作用:平衡多路查找树,适合磁盘存储。
解决的问题:高效管理和检索大规模数据。

应用场景

  • 数据库索引(如 MySQL)。
  • 文件系统(如 NTFS)。

数据结构解决的问题及对应应用场景

问题类型解决问题的数据结构应用场景
快速查找和插入哈希表、平衡树(红黑树、AVL 树)数据检索、缓存、字典实现
动态优先级管理堆(大顶堆、小顶堆)优先队列、任务调度、实时流数据的 Top-K 问题
快速存储和检索字符串字典树(Trie)拼写检查、搜索引擎自动补全
路径或连通性问题图(邻接表、邻接矩阵)、并查集网络路由、社交网络分析、最小生成树
数据的层次化存储与操作树(BST、B+ 树)文件系统、数据库索引
处理动态长度的数据链表(单链表、双向链表)内存管理、链式存储
任务调度或顺序问题队列、双端队列(Deque)操作系统进程调度、消息队列
递归或嵌套问题函数调用栈、表达式求值、括号匹配
搜索和路径规划问题图(DFS、BFS)、堆(用于 Dijkstra)地图导航、最短路径算法
大规模数据的排序与检索堆、平衡树(红黑树)、B+ 树外部排序、数据库查询、文件系统

常用算法与数据结构结合

  1. 排序算法
    • 冒泡排序、选择排序、插入排序
    • 快速排序、归并排序、堆排序
    • 桶排序、计数排序、基数排序
    • 时间复杂度及适用场景
  2. 搜索算法
    • 线性搜索
    • 二分搜索
    • 深度优先搜索(DFS)、广度优先搜索(BFS)
    • A* 搜索算法(启发式搜索)
  3. 字符串匹配算法
    • 暴力匹配
    • KMP 算法
    • Rabin-Karp 算法
    • Trie 树(前缀树)

综上。
数据结构的作用:通过合理组织和存储数据,解决效率、存储和操作问题。
学习掌握的过程由浅入深:先掌握基础数据结构(数组、链表、栈、队列),再逐步学习复杂的数据结构(树、图、哈希)。
结合算法:理解排序、搜索、字符串匹配等算法中使用的数据结构。
解决的问题:快速查找、动态优先级管理、路径规划、大规模数据检索等。
应用场景:从操作系统、数据库、网络路由到人工智能、大数据分析,数据结构是解决实际问题的重要工具。

每种数据结构都有其独特的特性和适用场景,学习时需结合理论与应用,理解其实现原理和使用方法,以便在实际开发中合理选用。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

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

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

相关文章

搭建Elastic search群集

一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件: /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…

链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 场景

在 12 月 4 日,链原生的 Web3 AI 数据网络 Chainbase 正式启动了 Chainbase AVS 主网,同时发布了首批 20 个 AVS 节点运营商名单。Chainbase AVS 是 EigenLayer AVS 中首个以数据智能为应用导向的主网 AVS,其采用四层网络架构,其中…

玩转OCR | 探索腾讯云智能结构化识别新境界

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

生信软件开发2 - 使用PyQt5开发一个简易GUI程序

往期文章: 生信软件开发1 - 设计一个简单的Windwos风格的GUI报告软件 1. 使用PyQt5设计一个计算器主程序 要求PyQt5 > 5.6, calculator.py与MainWindow.py处于同一目录,下载mainwindow-weird.ui和mainwindow.ui资源,运行calculator.py即…

“计算几何”简介

计算几何(Computational Geometry)简单来说就是用计算机解决几何问题。 Computational指“using or connected with computers使用计算机的;与计算机有关的”,Geometry指“the branch of mathematics that deals with the measur…

TowardsDataScience 博客中文翻译 2018~2024(一百二十三)

TowardsDataScience 博客中文翻译 2018~2024(一百二十三) 引言 从 2018 年到 2024 年,数据科学的进展超越了许多技术领域的速度。Towards Data Science 博客依然是这个领域的关键平台,记录了从基础工具到前沿技术的多方面发展。…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…

今天最新早上好问候语精选大全,每天问候,相互牵挂,彼此祝福

1、朋友相伴,友谊真诚永不变!彼此扶持绿树荫,共度快乐雨后天!一同分享的表情,愿我们友情长存,一生相伴永相连! 2、人生几十年,苦累伴酸甜,风华不再茂,雄心非当…

Verdi -- 打开Consol,创建和执行tcl命令举例

1.Verdi打开Console的步骤: For ref: 2创建tcl脚本. tcl脚本路径: 在Makefile下,与.v文件在同一个目录8_demo这个文件夹下。 font.tcl代码内容: verdiSetFont -monoFont "Courier" -monoFontSize "24" 作用…

基于java博网即时通讯软件的设计与实现【源码+文档+部署讲解】

目 录 1. 绪 论 1.1. 开发背景 1.2. 开发意义 2. 系统设计相关技术 2.1 Java语言 2.2 MySQL数据库 2.3 Socket 3. 系统需求分析 3.1 可行性分析 3.2 需求分析 3.3 系统流程图 3.4 非功能性需求 4. 系统设计 4.1 系统功能结构 4.2 数据库设计 5. 系统实现 5.…

视频汇聚融合云平台Liveweb一站式解决视频资源管理痛点

随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展&#xff0…

Hadoop集群(HDFS集群、YARN集群、MapReduce​计算框架)

一、 简介 Hadoop主要在分布式环境下集群机器,获取海量数据的处理能力,实现分布式集群下的大数据存储和计算。 其中三大核心组件: HDFS存储分布式文件存储、YARN分布式资源管理、MapReduce分布式计算。 二、工作原理 2.1 HDFS集群 Web访问地址&…

文本的AIGC率检测原理

背景 你可能在学生群里或者视频中看过这样的消息:“我们学校要求论文AI率不能超过30%!”、“你们学校查AI率吗?”之类的,这些消息到底是真是假? 随着人工智能的快速发展和广泛应用,不论是工作中还是学生学…

PODS:2024-12-21由麻省理工学院 和 OpenAI联合创建一个专门为个性化对象识别任务设计的数据集.

2024-12-21,由MIT和OpenAI联合创建的个性化视觉数据集,为细粒度和数据稀缺的个性化视觉任务提供了新的解决方案,推动了个性化模型的发展,具有重要的研究和应用价值。 一、研究背景: 在计算机视觉领域,现代…

OpenFeign快速入门 示例:黑马商城

使用起因 之前我们利用了Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。这样一来购物车虽然通过远程调用实现了调用商品服务的方法,但是远程调用的代码太复杂了: 解决方法 并且这种调用方式比较复杂,一会儿远程调用,一会儿本地调用。 因…

YOLOv11模型改进-模块-引入多尺度大核注意力Multi-scale Large Kernel Attention

MLKA 的提出源于图像超分辨率任务的挑战性,该任务需重建低质量图像缺失的高频信息,但因 LR 与 HR 图像对应关系复杂,寻找像素相关性困难。此前模型扩展容量的方法增加了训练负担和数据收集成本,而采用的注意力机制无法同时获取局部…

学习思考:一日三问(学习篇)之匹配VLAN

学习思考:一日三问(学习篇)之匹配VLAN 一、学了什么(是什么)1.1 理解LAN与"V"的LAN1.2 理解"V"的LAN怎么还原成LAN1.3 理解二层交换机眼中的"V"的LAN 二、为何会产生需求(为…

国际网络专线怎么申请开通?

随着国内企业在国际市场中的活跃度逐年提升,国际网络专线逐渐成为保障企业高效运营的重要基础设施。稳定且高效的网络不仅能够提升工作效率,还能为海外业务的顺利开展提供可靠保障。那么,国际网络专线如何开通?其申请流程是怎样的…

Ubuntu20.04安装openMVS<成功>.colmap<成功>和openMVG<失败(已成功)>

一、安装openMVS 参考官方文档 sudo apt-get -y install git mercurial cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev eigen git clone https://gitlab.com/libeigen/eigen --branch 3.4 mkdir eigen_build cd eigen_build &&\cmake . ../eigen -…

【magic-dash】01:magic-dash创建单页面应用及二次开发

文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…