{"name":"基本数据结构","id":"算法与数据结构-基本数据结构","content":"# 基本数据结构\n\n## 一、数据结构的第一性原理\n\n### 1. 数据结构解决的根本问题\n\n> **如何在有限资源（时间 / 空间）约束下，高效组织数据以支持特定操作模式。**\n\n任何数据结构，本质上都是对以下矛盾的不同取舍：\n\n* **访问效率 vs 更新效率**\n* **空间占用 vs 时间加速**\n* **实现复杂度 vs 运行时性能**\n\n因此，数据结构不是“种类问题”，而是**约束与权衡问题**。\n\n---\n\n### 2. 抽象数据类型（ADT）与实现的区分\n\n* **ADT（稳定层）**：\n\n  * 定义“允许什么操作”\n  * 规定“不变量和约束”\n* **实现（不稳定层）**：\n\n  * 数组 / 链表 / 指针 / 内存布局\n  * 具体语言与容器（Java / C++ / STL / JDK）\n\n> 同一个 ADT 可以有多种实现；实现细节不应反向污染抽象认知。\n\n---\n\n## 二、线性结构：统一抽象模型\n\n### 1. 线性结构的本质\n\n**定义**：\n\n* 数据元素之间是一对一的前后关系\n* 存在唯一的逻辑顺序\n\n**结构不变量**：\n\n* 元素具有线性次序\n* 任意元素（除首尾）都有唯一前驱与后继\n\n**核心操作维度**：\n\n* 访问（随机 / 顺序）\n* 插入 / 删除位置是否受限\n\n---\n\n### 2. 线性结构的能力分解\n\n| 能力维度 | 取值差异        |\n| ---- | ----------- |\n| 访问方式 | 随机访问 / 顺序访问 |\n| 更新成本 | 高 / 低       |\n| 操作约束 | 自由 / 受限     |\n| 空间布局 | 连续 / 非连续    |\n\n后续所有结构，都是在这些维度上的不同组合。\n\n---\n\n## 三、线性表（完全自由的线性 ADT）\n\n### 1. 抽象定义（稳定）\n\n**线性表 ADT**：\n\n* 支持按位置访问\n* 支持任意位置插入、删除\n* 不对操作顺序施加额外约束\n\n> 线性表是“最一般”的线性结构，其它结构均可视为其特化。\n\n---\n\n### 2. 顺序存储（数组实现）\n\n**核心特征**：\n\n* 连续内存\n* 支持 O(1) 随机访问\n\n**代价模型**：\n\n* 插入 / 删除需整体搬移\n* 容量固定 → 需要扩容策略\n\n**工程权衡原则**：\n\n* 扩容采用倍增，摊还成本可控\n* 缩容需引入滞后阈值，避免抖动\n\n> 具体倍数、阈值属于工程参数，而非结构本质。\n\n---\n\n### 3. 链式存储（链表实现）\n\n**核心特征**：\n\n* 非连续内存\n* 通过指针维持逻辑顺序\n\n**能力变化**：\n\n* 随机访问能力丧失\n* 插入 / 删除成本显著降低\n\n**变体统一抽象**：\n\n* 单向链表：仅后继\n* 双向链表：前驱 + 后继\n* 循环链表：逻辑首尾闭环\n* 哑节点：简化边界条件处理\n\n> 链表的价值不在“类型”，而在**指针带来的结构灵活性**。\n\n---\n\n## 四、操作受限的线性结构\n\n### 1. 栈（LIFO 约束）\n\n**本质**：\n\n* 在线性表基础上，限制插入 / 删除只能发生在一端\n\n**不变量**：\n\n* 后进入的元素，先被处理\n\n**工程意义**：\n\n* 隐式回溯\n* 状态保存与恢复\n\n**典型应用**：\n\n* 函数调用栈\n* 表达式求值\n* 语法分析\n\n> 栈不是“新结构”，而是**约束增强的线性表**。\n\n---\n\n### 2. 队列（FIFO 约束）\n\n**本质**：\n\n* 插入与删除分别受限于两端\n\n**不变量**：\n\n* 先进入的元素，先被处理\n\n**典型变体**：\n\n* 循环队列：解决顺序存储空间复用问题\n* 双端队列：允许两端操作，用于负载均衡与任务窃取\n\n> FIFO 本质上是对“时间顺序公平性”的建模。\n\n---\n\n## 五、从链表到跳表：结构演进逻辑\n\n### 1. 普通链表的根本瓶颈\n\n* 查找必须线性遍历\n* 时间复杂度 O(n)\n\n瓶颈不是“实现差”，而是：\n\n> **结构本身缺乏索引能力**。\n\n---\n\n### 2. 跳表的抽象思想\n\n**核心思想**：\n\n* 在有序链表之上，引入多级索引\n* 空间换时间\n\n**结构本质**：\n\n* 链表 + 层次化索引\n\n**查找过程**：\n\n* 自顶向下缩小区间\n* 类似树的搜索路径\n\n---\n\n### 3. 随机化与稳定性\n\n* 理想状态：完美平衡（类似完全二叉树）\n* 工程现实：动态插入 / 删除\n\n**解决方案**：\n\n* 使用概率分布决定节点层级\n* 以期望复杂度换取维护成本下降\n\n> 跳表的本质优势在于：\n> **以概率保证结构稳定性，而非强制平衡。**\n\n---\n\n### 4. 跳表 vs 平衡树（认知层对比）\n\n| 维度    | 跳表 | 平衡树 |\n| ----- | -- | --- |\n| 平衡方式  | 概率 | 强约束 |\n| 实现复杂度 | 低  | 高   |\n| 并发友好性 | 高  | 低   |\n| 工程可控性 | 强  | 中   |\n\n---\n\n## 六、结构选型的稳定方法论\n\n### 1. 选型不是记忆，而是推导\n\n**决策核心问题**：\n\n* 我更在乎什么？\n\n### 2. 选型参考矩阵\n\n| 需求特征       | 推荐结构   |\n| ---------- | ------ |\n| 高频随机访问     | 顺序表    |\n| 高频插入 / 删除  | 链表     |\n| 严格处理顺序     | 栈 / 队列 |\n| 有序查找 + 高并发 | 跳表     |\n\n---\n\n## 七、总结：稳定认知框架\n\n* 数据结构不是“工具集合”，而是**一组约束模型**\n* 学习重点应放在：\n\n  * 不变量\n  * 权衡关系\n  * 演进逻辑\n* 具体语言与容器只是**不稳定实现层**\n\n> 掌握抽象模型，才能在新问题中自然推导出合适结构。\n\n## 关联内容（自动生成）\n\n- [/算法与数据结构/算法策略.md](/算法与数据结构/算法策略.md) 算法策略与数据结构的选择密切相关，不同的数据结构适合不同的算法策略，理解两者关系有助于设计高效的算法解决方案\n- [/算法与数据结构/树.md](/算法与数据结构/树.md) 树结构是非线性数据结构的典型代表，与线性结构形成对比，扩展了数据组织和访问的可能性\n- [/算法与数据结构/散列表.md](/算法与数据结构/散列表.md) 散列表提供了不同于线性结构的访问模式，通过哈希函数实现平均O(1)时间复杂度的查找操作\n- [/算法与数据结构/图.md](/算法与数据结构/图.md) 图结构是最通用的数据结构之一，可以表示复杂的关系网络，是线性结构和树结构的进一步泛化\n- [/算法与数据结构/查找.md](/算法与数据结构/查找.md) 不同数据结构支持不同的查找算法，理解数据结构特性有助于选择合适的查找方法\n- [/中间件/数据库/索引.md](/中间件/数据库/索引.md) 数据库索引技术利用了多种数据结构，如B+树、哈希表等，是数据结构在实际系统中的重要应用\n- [/中间件/数据库/redis/数据结构.md](/中间件/数据库/redis/数据结构.md) Redis实现了多种高效的数据结构，展示了数据结构在内存数据库中的实际应用和优化策略\n- [/计算机系统/程序结构和执行/优化程序性能.md](/计算机系统/程序结构和执行/优化程序性能.md) 程序性能优化很大程度上依赖于合适的数据结构选择和算法设计\n- [/数据技术/检索技术.md](/数据技术/检索技术.md) 检索技术依赖于特定的数据结构来实现高效的查询和检索操作\n- [/软件工程/性能工程.md](/软件工程/性能工程.md) 性能工程中算法和数据结构的选择是影响系统性能的关键因素\n","metadata":"tags: ['数据结构', '算法', '数据结构与算法']","hasMoreCommit":false,"totalCommits":10,"commitList":[{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2026-01-28T16:48:27+08:00","author":"MY","message":"docs(data-structure): 重构基本数据结构文档并添加相关图片资源","hash":"06535a4db2899baecdc9758ebc93071655daece4"},{"date":"2025-11-16T21:30:56+08:00","author":"MY","message":"docs: 统一并精简文档标签","hash":"21362e9d7aeb62e05364cd5e7f3a3c24d7e293c7"},{"date":"2024-02-22T19:29:07+08:00","author":"MY","message":"📦算法与数据结构","hash":"a43c1f5ba155151373c1c4acad9c95803f6ca65a"},{"date":"2024-02-01T18:43:02+08:00","author":"MY","message":"✏算法","hash":"17aa5cb475a7b3005b9a474daa02f38ef0f95ff8"},{"date":"2022-07-08T17:45:19+08:00","author":"cjiping","message":"✏️更新 数据结构","hash":"167b36bdc37603af417a45def3bb166a9a639982"},{"date":"2022-07-07T17:08:24+08:00","author":"cjiping","message":"✏️更新 基本数据结构","hash":"284af52f31fb1181ddf5c38fc210790876938fcc"},{"date":"2020-09-21T10:21:55+08:00","author":"MY","message":"✏更新 数据结构","hash":"a3e4d8953d45c19800dd13bd64358e08c4806701"},{"date":"2020-09-20T13:45:11+08:00","author":"MY","message":"📦重构 数据结构位置","hash":"04a2a3c38c16b4daa359055535fab880ca82e4ea"},{"date":"2020-08-04T16:46:47+08:00","author":"MY","message":"➕增加 基本数据结构","hash":"b2c1f80077ee804c86afc01515c368aaeace6dd5"}],"createTime":"2020-08-04T16:46:47+08:00"}