数据结构基本知识

数据结构是计算机中组织和存储数据的方式,核心目标是提高数据操作(增删改查)的效率,适配不同场景的性能需求。其核心包含"逻辑结构""物理结构"和"基本操作"三大模块,是编程与算法设计的基础。

一、逻辑结构

逻辑结构描述数据元素之间的抽象关系,与存储介质无关,主要分为四类:

• 线性结构:数据元素按"一对一"顺序排列,仅有一个起点和一个终点,如数组、链表、栈、队列。例如数组中元素按索引连续有序,每个元素(除首尾)仅有一个前驱和一个后继。

• 树形结构:数据元素按"一对多"层级排列,存在根节点、子节点等层级关系,如二叉树、红黑树、B树。典型例子是文件系统的目录结构,一个根目录下可包含多个子目录和文件。

• 图形结构:数据元素按"多对多"任意关联,每个元素可与多个其他元素建立关系,如无向图、有向图、加权图。比如社交网络中用户之间的好友关系,构成复杂的图形结构。

• 集合结构:数据元素间无明确关联,仅属于同一集合(满足特定条件的元素分组),如数学中的集合,仅关注元素是否存在,不考虑顺序和关联。

二、物理结构(存储结构)

物理结构指数据在计算机内存中的实际存储方式,直接影响操作效率,主要分为两类:

• 顺序存储:数据元素连续存储在一段物理地址连续的内存空间中,如数组。优点是随机访问速度快(通过索引直接定位),缺点是插入/删除需移动大量元素(需保持连续性)。

• 链式存储:数据元素分散存储在内存中,通过指针(或引用)关联前后元素,如链表。优点是插入/删除无需移动元素(仅修改指针),缺点是无法随机访问(需从表头遍历查找)。

三、核心数据结构及特性

  1. 线性表(基础线性结构)

• 数组:顺序存储,固定长度(静态)或动态扩容,支持O(1)随机访问,增删操作时间复杂度O(n)。

• 链表:链式存储,分为单链表(仅存后继指针)、双链表(存前后继指针)、循环链表(首尾相连),增删操作O(1)(已知位置),访问O(n)。

  1. 栈与队列(受限线性结构)

• 栈:"先进后出"(LIFO),仅允许在栈顶操作,支持push(入栈)、pop(出栈)、peek(查看栈顶),时间复杂度均为O(1),常用于递归、表达式求值、括号匹配。

• 队列:"先进先出"(FIFO),允许在队尾入队、队首出队,支持enqueue(入队)、dequeue(出队),基础队列O(1)操作,优先级队列(按优先级排序)O(logn)操作,常用于任务调度、广度优先搜索(BFS)。

  1. 树结构(层级关联结构)

• 二叉树:每个节点最多有两个子节点(左子树、右子树),常见类型有满二叉树(所有节点均有两个子节点)、完全二叉树(除最后一层外均满,最后一层左连续)。

• 遍历方式:前序遍历(根→左→右)、中序遍历(左→根→右)、后序遍历(左→右→根)、层序遍历(按层级从上到下),均为O(n)时间复杂度。

• 应用变种:二叉搜索树(左子树值<根<右子树值,支持O(logn)查找)、红黑树(自平衡二叉搜索树,避免极端情况)、堆(完全二叉树,分为大顶堆/小顶堆,用于优先级队列)。

  1. 图结构(多对多关联结构)

• 表示方法:邻接矩阵(二维数组,适合稠密图)、邻接表(链表数组,适合稀疏图)。

• 遍历方式:深度优先搜索(DFS,递归或栈实现)、广度优先搜索(BFS,队列实现),均为O(V+E)(V为顶点数,E为边数)。

• 核心应用:最短路径(Dijkstra算法、Floyd算法)、拓扑排序(针对有向无环图DAG)、连通分量查找。

  1. 哈希表(高效查找结构)

• 原理:通过哈希函数将键(key)映射到内存地址,实现O(1)平均查找效率,解决哈希冲突的方式有拉链法(冲突元素链表存储)、开放地址法(线性探测、二次探测)。

• 特性:查找、插入、删除效率高,无序存储,适用于缓存、字典、数据去重等场景。

四、数据结构的选择原则

• 优先考虑操作频率:查询频繁选顺序存储(数组、哈希表),增删频繁选链式存储(链表)。

• 考虑数据规模:小规模固定数据用数组,大规模动态数据用链表、栈/队列。

• 考虑场景需求:层级关系用树(如文件系统),复杂关联用图(如社交网络),有序查找用二叉搜索树/红黑树,无序快速查找用哈希表。

相关推荐
fei_sun1 小时前
【总结】【数据结构】树、二叉树、森林转化
数据结构
豆沙沙包?1 小时前
2025年--Lc298-1019. 链表中的下一个更大节点(栈)--java版
java·数据结构·链表
罗湖老棍子2 小时前
二维vector完全指南1:从定义到增删改查
数据结构·c++·算法·stl
再卷也是菜2 小时前
C++篇(22)LRU Cache
数据结构·c++·算法
程序猿多布2 小时前
数据结构 之 栈和队列
数据结构··队列
zs宝来了3 小时前
HOT100系列-堆类型题
数据结构·算法·排序算法
报错小能手3 小时前
数据结构 带头节点的链表
数据结构·链表
sin_hielo3 小时前
leetcode 1590
数据结构·算法·leetcode
吃着火锅x唱着歌3 小时前
LeetCode 2748.美丽下标对的数目
数据结构·算法·leetcode