数据结构泛谈

ops/2024/12/30 18:28:59/

数据结构是计算机科学中用于组织、管理和存储数据的一种方式;

它决定了数据的存储布局以及如何有效地操作这些数据;

是算法设计和性能优化的基础,选择合适的数据结构可以显著提升程序的运行效率。

数据结构我们可以这么拆解:数据 + 结构

为什么?下面我要说骚话了

数据——对应的是储存特性,我们要使用合适的数据结构高效的存储数据,这个我们可以认作是数据结构中的一个方面,体现在物理存储上面,计算机实际是如何进行数据存储的:

存储结构

存储结构是逻辑结构在计算机中的实现方式,分为以下两种(其实考虑到计算机的存储结构设计以及局部性原理,所有的存储都是一个内存块,讨论逻辑地址,那么一个连续的数据需要存储,只存在两种存储形式,连续的内存块和不连续的,而不连续的内存块以什么形式联系在一起就可以分为 更多的逻辑结构):

  • 顺序存储: 数据存储在连续的内存单元中。
    • 优点:存取速度快。
    • 缺点:插入和删除效率低。
  • 链式存储: 数据存储在非连续的内存单元中,通过指针连接。
    • 优点:插入和删除效率高。
    • 缺点:访问速度较慢。

结构——词重点就是结构,对应的是逻辑特性,就和抽象的联系起来,讨论的就是逻辑性的关系:

逻辑结构

逻辑结构指数据之间的逻辑关系,主要分为以下四种:

  • 集合结构: 数据元素之间仅有“属于同一个集合”的关系。
    • 例如:集合 {A, B, C}。
  • 线性结构: 数据元素之间是一对一的关系。
    • 例如:数组、链表。
  • 树形结构: 数据元素之间是一对多的关系。
    • 例如:二叉树、B 树。
  • 图结构: 数据元素之间是多对多的关系。
    • 例如:邻接矩阵、邻接表。

常见数据结构简介

数据结构特点优点缺点应用场景
数组顺序存储,支持随机访问访问效率高(O(1))插入和删除效率低(O(n))频繁访问元素,数据大小固定
链表链式存储,每个节点包含数据和指针插入和删除效率高(O(1))访问效率低(O(n))动态数据存储,数据大小变化频繁
先进后出(LIFO)的线性结构简单易用,支持递归调用不适合需要随机访问的场景递归调用、括号匹配、表达式求值
队列先进先出(FIFO)的线性结构顺序处理操作方便不支持随机访问任务调度、消息队列
哈希表基于键值对存储,通过哈希函数快速定位元素查找、插入和删除效率高(平均 O(1))需要处理哈希冲突,空间利用率低数据快速查找,频繁增删操作
分层结构,节点之间是一对多的关系快速查找,层级关系清晰平衡维护成本高(如平衡二叉树)层级关系表示、快速查找
顶点和边组成的结构,用于表示复杂关系表示多对多关系灵活复杂度高,存储和操作消耗较大网络连接、路径规划、社交网络分析

数据结构选择参考

因素描述
操作类型数据是否需要频繁插入、删除、修改或查询?
数据大小数据量较大时,空间复杂度可能成为关键问题。
数据关系数据之间是否存在特定的逻辑关系(如层级、顺序或网状)?
访问模式是否需要随机访问或按顺序访问?

数据结构学习建议(都是鬼话,谁能背下来,反正我不能……)

  1. 掌握基础结构: 熟悉数组、链表、栈和队列的实现和应用。
  2. 理解复杂结构: 深入学习树和图的各种类型和操作。
  3. 分析复杂度: 学会评估时间复杂度和空间复杂度。
  4. 动手实践: 多用代码实现和优化常见数据结构
  5. 结合实际: 根据具体问题选择合适的数据结构解决。

数据结构和算法:

纯纯的相互纠缠不清,你中有我、我中有你,上面说了我们背不下来,我们还是记常用算法吧,常用stl你啥都能了解了,记不住的时候知道有哪些相关的数据结构就行了。算法啥的我们也是这样的,学了记不住没关系,大家都是代码“文抄公”谁也别笑谁,知道有哪些对付哪种问题,你再上网查吧,别对自己那么狠(当然有狠人,我给跪下,emmmm)

(下面是废话)

  • 数据结构是算法的载体,不同的数据结构为算法的实现提供不同的支持。
    • 例如:堆排序依赖于堆数据结构,深度优先搜索(DFS)依赖于栈。
  • 算法是对数据结构的操作和优化。
    • 例如:二分查找基于有序数组,Dijkstra 算法基于图。

我在这个系列中会逐步解析基本的数据结构……再见


http://www.ppmy.cn/ops/143850.html

相关文章

探索Web3的核心原则:去中心化与用户控制

Web3作为未来互联网的愿景,正逐步改变我们对网络的认知。它的两大核心原则——去中心化和用户控制,不仅推动了技术的革新,也重新定义了互联网用户与平台之间的关系。这些原则的落地,能够让用户在数字世界中拥有更多的自主权、隐私…

数据结构之二叉搜索树(Binary Search Tree)

数据结构之二叉搜索树(Binary Search Tree) 1. ⼆叉搜索树的概念2. ⼆叉搜索树的性能分析3.⼆叉搜索树的 查,删,插(没有改,因为没有意义会破坏本质)(源码) 1. ⼆叉搜索树…

界面控件DevExpress v24.2.3全新发布——正式支持.NET 9

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 屡获大奖的软件开发平台DevExpress 近期重要版本v24.2已正式发布,该版本拥有众多新…

MFC 应用程序语言切换

在开发多语言支持的 MFC 应用程序时,如何实现动态语言切换是一个常见的问题。在本文中,我们将介绍两种实现语言切换的方式,并讨论其优缺点。同时,我们还会介绍如何通过保存配置文件来记住用户的语言选择,以及如何在程序…

flask-admin+Flask-WTF 实现实现增删改查

背景: flask-adminflask-wtf在网上可以搜索到很多资料,但有价值的很少,或许是太简单,或者是很少人这么用,或者。。。,本文将作者近礼拜摸索到的一点经验分享出来,给自己做个记录。 材料&#…

nginx-虚拟主机配置笔记

目录 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm1001.2014.3001.5501 一、 基于域名 二、 基于IP 三、 基于端口 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm100…

Flamingo论文介绍:把视觉特征向语言模型看齐

今天介绍一篇经典的多模态论文,来自NeurIPS 2022的《Flamingo: a Visual Language Model for Few-Shot Learning》 ,论文地址:https://arxiv.org/pdf/2103.00020 文章目录 一、Motivate二、Method三、模块细节:Perceiver Resampl…

短视频账号矩阵系统源代码-代码分享

PHP8.0 服务器安装准备 在进行抖音短视频矩阵系统源码部署前,安装 PHP8.0 服务器需要做好一些基础准备工作,这能让后续的安装过程更加顺利哦,下面就来给大家详细说一说。 首先,要了解服务器的配置要求呀。一般来说,服…