数据结构泛谈

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

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

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

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

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

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

存储结构

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

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

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

逻辑结构

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

  • 集合结构: 数据元素之间仅有"属于同一个集合"的关系。
    • 例如:集合 {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 算法基于图。

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

相关推荐
阿华的代码王国1 分钟前
【算法】栈
数据结构·算法·leetcode·
SpongeG18 分钟前
数据结构_平衡二叉树
数据结构·算法
shentuyu木木木(森)1 小时前
入门STL(map/multiset)
开发语言·数据结构·c++·算法·map·multiset
Psycho_MrZhang1 小时前
常见的数据结构和应用场景
数据结构·算法·哈希算法
SRKkAI2 小时前
取子串(指针)
数据结构·c++·算法
zyh_0305213 小时前
GO--堆(have TODO)
数据结构·算法·golang
十一29283 小时前
数据结构--链表和双向链表的详解及实现(哨兵位详解 数组和链表的区别)
数据结构·链表
苓诣5 小时前
寻找重复数
数据结构·算法·leetcode
Cooloooo5 小时前
完全二叉树【东北大学oj数据结构9-1】C++
数据结构