数据结构基本知识

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

一、逻辑结构

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

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

• 树形结构:数据元素按"一对多"层级排列,存在根节点、子节点等层级关系,如二叉树、红黑树、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)平均查找效率,解决哈希冲突的方式有拉链法(冲突元素链表存储)、开放地址法(线性探测、二次探测)。

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

四、数据结构的选择原则

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

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

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

相关推荐
闪电悠米3 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
WL学习笔记4 小时前
堆(数据结构)
数据结构·
wabs6668 小时前
关于图论【卡码网100.最大岛屿的面积的思考】
数据结构·算法·图论
yuannl109 小时前
图的最短路径Dijkstra
数据结构
zander25810 小时前
138. 随机链表的复制
数据结构·算法·链表
过期动态10 小时前
【LeetCode 热题 100】找到字符串中所有字母异位词
java·数据结构·算法·leetcode·职场和发展·rabbitmq
来一碗刘肉面11 小时前
栈在递归中的应用
数据结构·算法
皓月斯语11 小时前
程序设计语言的特点
开发语言·数据结构·c++
邪修king11 小时前
C++ 进阶终章:异常机制与智能指针全解 —— 从错误处理到 RAII 资源管理,打通现代 C++ 的核心命脉
android·数据结构·c++
Adios79419 小时前
设置交集大小至少为2
数据结构·算法·leetcode