# CodeBrick 408 数据结构讲义 > 面向 408(计算机学科专业基础)考研的知识讲义,共 130 篇。每个链接都是纯文本 Markdown, > 可直接抓取阅读;公式为 LaTeX、流程图为 mermaid 源码。引用时请保留原文链接。 > 站点:https://www.codebrick.tech/ds-blog/ ## 文章 - [408 C 语言:卷面答题模板与 18 题训练路线](https://www.codebrick.tech/ds-blog/posts/c-exam/answering.md): 将 C 语法转化为 408 算法设计题得分:审题、思想、代码、复杂度四段式模板,配套 2009—2026 年真题训练顺序和检查表。 - [408 C 语言:数组、下标与二维矩阵](https://www.codebrick.tech/ds-blog/posts/c-exam/arrays-matrices.md): 从 408 真题掌握 C 数组参数、下标边界、双指针、反向扫描、标记数组和邻接矩阵,配套在线 C Playground。 - [408 C 语言:函数、表达式与控制流](https://www.codebrick.tech/ds-blog/posts/c-exam/functions-control-flow.md): 面向 408 数据结构代码题的最小 C 语法:读函数原型、声明状态变量、写 if/for/while、正确 return,并通过在线 Playground 立即练习。 - [408 代码题需要会多少 C 语言?18 年真题给出的答案](https://www.codebrick.tech/ds-blog/posts/c-exam/index.md): 从 2009—2026 年 408 数据结构代码题反推 C 语言应试范围:只学卷面需要的函数、数组、结构体、指针、递归和内存,不按普通编程课展开。 - [408 C 语言:动态内存、字符与输出](https://www.codebrick.tech/ds-blog/posts/c-exam/memory-io.md): 只讲 408 代码题真正用到的 calloc、malloc、free、字符输出和 printf,并说明哪些完整程序语法不应写进考试答案。 - [408 C 语言:递归与状态传递](https://www.codebrick.tech/ds-blog/posts/c-exam/recursion-state.md): 用 408 树题掌握 C 递归的出口、当前层工作、返回值、参数传递和全局状态,覆盖 WPL、表达式树与顺序存储 BST。 - [408 C 语言:结构体、指针与链式结点](https://www.codebrick.tech/ds-blog/posts/c-exam/structs-pointers.md): 面向 408 链表与树代码题讲清 typedef struct、点号与箭头、NULL、地址判等、二级指针、结点删除和指针重连,并配套在线练习。 - [2009·42 倒数第 k 个结点:从两遍扫描到双指针](https://www.codebrick.tech/ds-blog/posts/exams/2009-42-find-kth-from-tail.md): 408 真题 2009 年 42 题详解。先写对最自然的两遍扫描解并按判分口径估分,再找出「第一遍只带走一个数字」的浪费,改造成双指针一遍扫描的最优解,两版代码可视化对照执行。 - [2010·42 数组循环左移:从辅助数组到三次逆置](https://www.codebrick.tech/ds-blog/posts/exams/2010-42-rotate-array.md): 408 真题 2010 年 42 题详解。先写对最自然的辅助数组暂存解并按判分口径估分,再对照空间约束找出浪费,用逆置恒等式改造成 O(1) 空间的三次逆置最优解,两版代码可视化对照执行。 - [2011·42 两个升序序列的中位数:从归并计数到双数组折半](https://www.codebrick.tech/ds-blog/posts/exams/2011-42-two-sorted-median.md): 408 真题 2011 年 42 题详解。先写对最自然的归并计数解并按判分口径估分,再找出 O(n) 归并对有序性的浪费,改造成 O(log n) 双数组同时折半最优解,两版代码可视化对照执行。 - [2012·42 共同后缀起点:从双层枚举到先对齐再齐步走](https://www.codebrick.tech/ds-blog/posts/exams/2012-42-common-suffix.md): 408 真题 2012 年 42 题详解。先立住「共享是物理共享、判等用指针」这个正确性地基,写对 O(mn) 双层枚举的暴力解并按判分口径估分,再利用「共同后缀距尾等远」的性质改造成先对齐再同步前进的线性最优解,两版代码可视化对照执行。 - [2013·41 主元素:从双重循环计数到摩尔投票](https://www.codebrick.tech/ds-blog/posts/exams/2013-41-majority-element.md): 408 真题 2013 年 41 题详解。先写对 O(n²) 双重循环计数暴力解并按判分口径估分,再找出重复扫描的浪费,用「过半必有剩余」的性质改造成 O(n) 时间 O(1) 空间的摩尔投票最优解,两版代码可视化对照执行。 - [2014·41 二叉树 WPL:一遍遍历带上深度,直观写法即满分](https://www.codebrick.tech/ds-blog/posts/exams/2014-41-binary-tree-wpl.md): 408 真题 2014 年 41 题详解。这道题不用优化——遍历 n 个结点求 WPL 本身就是 O(n) 下界,DFS 自顶向下传深度、叶子处累加即满分解。真正的难点在叶结点判定、深度起点、内部结点权值不计这三处细节。 - [2015·41 链表按绝对值去重:从两两比较到值域标记](https://www.codebrick.tech/ds-blog/posts/exams/2015-41-abs-dedup.md): 408 真题 2015 年 41 题详解。先写对 O(m²) 两两比较的暴力解并按判分口径估分,再抓住暴力解全程没碰的「|data| ≤ n」条件,改造成值域标记数组的 O(m) 单趟最优解,两版代码可视化对照执行。 - [2016·43 集合划分:从全排序到 partition 单侧递归](https://www.codebrick.tech/ds-blog/posts/exams/2016-43-partition-min-diff.md): 408 真题 2016 年 43 题详解。先写对「排序后对半分」的暴力解并按判分口径估分,再看清「全序是多买的」这个浪费,改造成借快排 partition 找第 ⌊n/2⌋ 小的平均 O(n) 最优解,两版代码可视化对照执行。 - [2017·41 表达式树转中缀:中序遍历+加括号,难点不在效率在细节](https://www.codebrick.tech/ds-blog/posts/exams/2017-41-expr-tree-to-infix.md): 408 真题 2017 年 41 题详解。这道题不用优化——遍历表达式树的 n 个结点求中缀表达式本身就是 O(n) 下界,中序遍历+按非根加括号即满分解。真正的难点在括号取舍、单目负号处理、根不加括号这三处细节。 - [2018·41 未出现的最小正整数:从逐个试探到标记数组](https://www.codebrick.tech/ds-blog/posts/exams/2018-41-min-missing-positive.md): 408 真题 2018 年 41 题详解。先写对 O(n²) 暴力解并按判分口径估分,再找出它的浪费,一步步改造成 O(n) 标记数组最优解,两版代码可视化对照执行。 - [2019·41 链表重排:从数组辅助到三步原地](https://www.codebrick.tech/ds-blog/posts/exams/2019-41-reorder-list.md): 408 真题 2019 年 41 题详解。先写对最自然的数组辅助解并按判分口径估分,再对照 O(1) 空间硬约束找出差距,改造成「找中点 + 逆置 + 交叉合并」三步原地最优解,两版代码可视化对照执行。 - [2019·42 设计可复用空间的队列:约束反推数据结构](https://www.codebrick.tech/ds-blog/posts/exams/2019-42-circular-queue.md): 408 真题 2019 年 42 题详解。这是一道数据结构设计题,没有暴力vs最优,考的是从「始终 O(1) + 空间可复用」两条约束反推出循环单链表+哨兵+空闲池,重点在出队不释放结点等设计细节。 - [2020·41 三元组最小距离:从三重循环到三指针](https://www.codebrick.tech/ds-blog/posts/exams/2020-41-triplet-min-distance.md): 408 真题 2020 年 41 题详解。先写对 O(pqr) 三重循环暴力解并按判分口径估分,再用 D=2(max−min) 的化简与升序性质找出浪费,改造成每轮推进最小者的三指针 O(p+q+r) 最优解,两版代码可视化对照执行。 - [2020·42 前缀编码译码:把「字符只放叶结点」这条约束用透](https://www.codebrick.tech/ds-blog/posts/exams/2020-42-prefix-code.md): 408 真题 2020 年 42 题详解。这是一道数据结构设计题,没有暴力vs最优,考的是从「前缀特性」反推出编码树(字符全在叶结点),重点在译码过程和前缀性判定的两种违反情况都要说全。 - [2021·41 EL 路径判定:看着像图算法,一趟扫度就够](https://www.codebrick.tech/ds-blog/posts/exams/2021-41-euler-path.md): 408 真题 2021 年 41 题详解。这道题不用优化——邻接矩阵读一遍就是复杂度下界,一趟统计奇度顶点即满分。重点在判定条件 oddCount∈{0,2} 和别画蛇添足去构造欧拉路径。 - [2022·41 顺序存储判 BST:从中序数组到一个 prev](https://www.codebrick.tech/ds-blog/posts/exams/2022-41-verify-bst-array.md): 408 真题 2022 年 41 题详解。先写对「中序输出到数组再判有序」的暴力解,再看清整条序列只被相邻比较用了一遍的浪费,改造成中序遍历中与前驱直接比较的最优解,两版代码可视化对照执行。 - [2022·42 十万数找最小 10 个:全排序到大根堆门槛过滤](https://www.codebrick.tech/ds-blog/posts/exams/2022-42-top-k-min.md): 408 真题 2022 年 42 题详解。题面没写「尽可能高效」这四个字,却在「平均比较次数尽可能少」这句措辞里藏了同样的要求。先看全排序为什么按不达最优处理,再拆解大根堆门槛过滤这个反直觉的最优解。 - [2023·41 有向图 K 顶点:数一遍出入度就完了](https://www.codebrick.tech/ds-blog/posts/exams/2023-41-graph-k-vertices.md): 408 真题 2023 年 41 题详解。有向图 K 顶点判定不用优化——扫一遍邻接矩阵统计出度入度已是该存储下的下界。重点在行列方向别搞反、outDeg 严格大于 inDeg、输出顶点名不输出下标。 - [2024·41 拓扑序唯一性判定:摘点摘出答案](https://www.codebrick.tech/ds-blog/posts/exams/2024-41-topo-uniqueness.md): 408 真题 2024 年 41 题详解。判定 DAG 拓扑序是否唯一不用优化——Kahn 摘点每一步数一遍零入度顶点即是标准答案。重点在三分支判定、已摘顶点入度置 -1、固定 n 步循环别用 while。 - [2025·41 后缀最大乘积:从逐个后缀扫描到反向一遍](https://www.codebrick.tech/ds-blog/posts/exams/2025-41-suffix-max-product.md): 408 真题 2025 年 41 题详解。先写对每个下标向后扫一遍的 O(n²) 暴力解并按判分口径估分,再找出相邻后缀被反复重扫的浪费,改造成反向扫描同时维护后缀 max/min 的 O(n) 最优解,两版代码可视化对照执行。 - [2026·41 BST 最近邻:从中序遍历全树到沿路径下降](https://www.codebrick.tech/ds-blog/posts/exams/2026-41-bst-closest-key.md): 408 真题 2026 年 41 题详解。题面通篇没提「尽可能高效」,但给定的存储结构是二叉搜索树而不是普通二叉树——这本身就是最优性要求。先写对中序遍历整树的暴力解并按判分口径估分,再用 BST 有序性把它改造成沿单条路径下降的 O(h) 最优解,两版代码可视化对照执行。 - [408 算法大题:从暴力解到最优解(专题总纲)](https://www.codebrick.tech/ds-blog/posts/exams/brute-to-optimal.md): 408 算法设计题的判分把正确性和最优性拆成两个维度,写对的暴力解能拿走大部分分数。本文盘点 2009-2026 年 21 道算法设计真题的暴力解与最优解对照,给出一条「先写对、再变快」的备考路线。 - [判断平衡二叉树:从自顶向下到自底向上](https://www.codebrick.tech/ds-blog/posts/exams/ext-balanced-tree.md): 408 拓展训练。判断一棵树是否平衡,最直接的想法是对每个结点分别求左右子树高度,写对能拿正确性分,但每个结点都重新算一遍高度会让复杂度退化到 O(n^2)。把求高度和判平衡合并成一次自底向上的遍历,顺带在子树已经不平衡时提前剪枝,就能把复杂度降到 O(n)。这是考纲内经典题,非真题。 - [二分查找左右边界:从线性扫到二分收敛](https://www.codebrick.tech/ds-blog/posts/exams/ext-binary-search-bound.md): 408 拓展训练。有序数组里目标值可能重复出现,暴力解线性扫一遍找首尾位置是 O(n);二分查找收紧边界——找左边界时命中也向左收、找右边界时命中也向右收——把复杂度降到 O(log n)。这是考纲内经典题,非真题。 - [由先序和中序序列构造二叉树:递归定位根](https://www.codebrick.tech/ds-blog/posts/exams/ext-build-tree.md): 408 拓展训练。给定先序和中序遍历序列,还原出唯一确定的二叉树,一遍递归即达 O(n) 下界,直观写法就是满分解。重点在中序序列里定位根、以及据此切分先序/中序子区间的下标计算,这两处是最容易算错的地方。这是考纲内经典题,非真题。 - [判断完全二叉树:层序遍历一遍](https://www.codebrick.tech/ds-blog/posts/exams/ext-complete-tree.md): 408 拓展训练。判断一棵二叉树是否为完全二叉树,层序遍历把空孩子也入队,一遍扫描即达 O(n) 下界,直观写法就是满分解。重点在「遇到第一个空结点之后不能再出现非空结点」这条判定,漏掉它是最常见的失分点。这是考纲内经典题,非真题。 - [连通分量计数:DFS 数一遍](https://www.codebrick.tech/ds-blog/posts/exams/ext-connected-components.md): 408 拓展训练。无向图连通分量计数不用优化——对每个未访问顶点起一次 DFS 标记整个连通块,起了几次 DFS 就是几个连通分量,遍历整张图本身就是下界。重点在 visited 数组、外层遍历所有顶点、别漏掉孤立顶点。这是考纲内经典题,非真题。 - [求逆序对数:从双重循环到归并顺带统计](https://www.codebrick.tech/ds-blog/posts/exams/ext-count-inversions.md): 408 拓展训练。数组中 ia[j] 的对数是逆序对数,暴力解双重循环枚举所有下标对是 O(n^2);归并排序在合并两个有序半区时,一个右半元素被取出的瞬间就能一次性算出它和左半剩余元素构成的逆序对,顺带把复杂度降到 O(n log n)。这是考纲内经典题,非真题。 - [课程表·拓扑排序判环:Kahn 摘点](https://www.codebrick.tech/ds-blog/posts/exams/ext-course-schedule.md): 408 拓展训练。给定课程数与先修关系,判断能否修完所有课,等价于判断有向图是否有环。Kahn 算法反复摘除入度为 0 的顶点,能摘完全部顶点则无环、可以修完,摘不完则有环。手段与 2024·41 拓扑序唯一性同源,但判定的问题不同。这是考纲内经典题,非真题。 - [逆波兰表达式求值:栈上直接算](https://www.codebrick.tech/ds-blog/posts/exams/ext-eval-rpn.md): 408 拓展训练。逆波兰(后缀)表达式求值没有「尽可能高效」的要求,一个操作数栈、一趟扫描就是最优解。难点不在优化,在弹出顺序——先弹出的是右操作数,减法、除法这类不满足交换律的运算符弄反顺序就会算错。这是考纲内经典题,非真题。 - [判断无向图是否为树:连通且无环](https://www.codebrick.tech/ds-blog/posts/exams/ext-graph-is-tree.md): 408 拓展训练。无向图判树等价于「恰有 n-1 条边 且 连通」,也等价于「加边过程中不出现环」。暴力解逐条边用 BFS/DFS 判连通、检测环,O(VE);用并查集维护集合归属可以把检测降到近乎线性。这是考纲内经典题,非真题。 - [中缀表达式转后缀:栈处理优先级](https://www.codebrick.tech/ds-blog/posts/exams/ext-infix-to-postfix.md): 408 拓展训练。中缀转后缀没有「尽可能高效」的要求,一个运算符栈、一趟扫描就是最优解。难点在优先级比较必须用大于等于而不是大于(保住左结合性),以及左右括号的入栈弹栈时机。这是考纲内经典题,非真题。 - [中序遍历的非递归写法:用栈模拟递归](https://www.codebrick.tech/ds-blog/posts/exams/ext-inorder-iterative.md): 408 拓展训练。中序遍历本身没有暴力优化的分差,非递归写法考的是另一种能力——把系统递归的隐式调用栈改造成显式的栈操作。核心是「压左到底、弹出访问、转向右孩子」这个循环不变量,写错任何一处都会漏结点或顺序错。这是考纲内经典题,非真题。 - [翻转二叉树:一遍遍历交换左右](https://www.codebrick.tech/ds-blog/posts/exams/ext-invert-tree.md): 408 拓展训练。把一棵二叉树左右镜像翻转,一遍递归交换每个结点的左右孩子即达 O(n) 下界,直观写法就是满分解。重点在交换必须用临时变量、空结点直接返回这两处边界。这是考纲内经典题,非真题。 - [KMP 模式匹配:从朴素回退到 next 数组](https://www.codebrick.tech/ds-blog/posts/exams/ext-kmp.md): 408 拓展训练。串的模式匹配是考纲核心,但真题的代码大题从没考过。先写对朴素匹配 BF 的 O(mn),看清它每次失配都让主串指针回退的浪费,再用 next 数组把主串指针「只进不退」,升级成 O(m+n) 的 KMP。这是考纲内经典题,非真题。 - [单链表判环:从哈希表到快慢指针](https://www.codebrick.tech/ds-blog/posts/exams/ext-linked-list-cycle.md): 408 拓展训练。判断单链表是否有环,最直接的想法是拿哈希集合记录访问过的结点,再次撞见即有环——但环的存在性其实只靠两个指针的相对速度就能测出。本文从哈希集合解写到 Floyd 快慢指针,O(1) 空间判环。这是考纲内经典题,非真题。 - [二叉树的最大深度:一遍递归即满分](https://www.codebrick.tech/ds-blog/posts/exams/ext-max-depth.md): 408 拓展训练。二叉树最大深度是最简单的后序遍历应用——空树深度 0,非空结点深度是左右子树深度较大者加一,一遍递归遍历每个结点一次就是复杂度下界,直观写法即满分。难点只在空树边界和加一的位置。这是考纲内经典题,非真题。 - [合并两个有序链表:直白拼接即满分](https://www.codebrick.tech/ds-blog/posts/exams/ext-merge-sorted-lists.md): 408 拓展训练。合并两个升序单链表,题面没有「尽可能高效」的要求,双指针归并谁小接谁,读一遍两条链就是复杂度下界,直观写法即满分解。重点在虚拟头结点和收尾拼接两处细节。这是考纲内经典题,非真题。 - [判断链表回文:从复制到数组到中点逆置](https://www.codebrick.tech/ds-blog/posts/exams/ext-palindrome-linked-list.md): 408 拓展训练。判断单链表是否回文,最直接的想法是把值复制到数组里用双指针比较,O(n) 空间;抓住链表只能顺序读、不能逆序读这一点浪费,用快慢指针找中点、后半逆置再比较,O(1) 空间判回文。这是考纲内经典题,非真题。 - [用两个栈实现队列:两个栈的分工](https://www.codebrick.tech/ds-blog/posts/exams/ext-queue-via-stacks.md): 408 拓展训练。这是一道数据结构设计题——只给你栈这一种工具,要求实现队列的先进先出语义。核心洞察是「倒两次等于翻转两次、翻转两次等于不翻转」,用 in 栈接收入队、out 栈负责出队,只在 out 空时才搬运,摊还 O(1)。这是考纲内经典题,非真题。 - [删除排序链表的重复元素:一趟相邻比较](https://www.codebrick.tech/ds-blog/posts/exams/ext-remove-duplicates-sorted-list.md): 408 拓展训练。已排序链表里的重复元素必然相邻,一趟相邻比较即可删干净,读一遍链表就是复杂度下界,直观写法即满分解。和真题 2015·41 按绝对值去重看似相似,实则一个靠有序性、一个靠值域标记,是两种不同的性质。这是考纲内经典题,非真题。 - [顺序表原地删除指定元素:双指针一趟搬移](https://www.codebrick.tech/ds-blog/posts/exams/ext-remove-element-inplace.md): 408 拓展训练。在顺序表中原地删除所有等于给定值的元素,双指针一趟扫描、慢指针只写非目标元素,读一遍数组就是复杂度下界,直观写法即满分解。重点在慢指针的写入语义与返回新长度。这是考纲内经典题,非真题。 - [判断对称二叉树:镜像同步遍历](https://www.codebrick.tech/ds-blog/posts/exams/ext-symmetric-tree.md): 408 拓展训练。判断一棵二叉树是否与自己的镜像对称,一遍递归即达 O(n) 下界,直观写法就是满分解。重点在递归时左右子树的交叉配对——外侧对外侧、内侧对内侧,配对方向写反是最容易翻车的地方。这是考纲内经典题,非真题。 - [括号匹配:一个栈走一遍](https://www.codebrick.tech/ds-blog/posts/exams/ext-valid-parentheses.md): 408 拓展训练。括号匹配是栈的经典应用,读一遍字符串就是复杂度下界,一个栈直观写法即满分。重点在左括号入栈、右括号比栈顶、结束查栈空这三处判定,以及别去想更复杂的方案。这是考纲内经典题,非真题。 - [408 算法拓展训练:考纲内的经典题(导语)](https://www.codebrick.tech/ds-blog/posts/exams/extensions.md): 22 道 408 数据结构真题算法设计题练完之后的拓展训练。精选考纲内、真题代码题尚未直接考过的经典算法题,沿用「暴力→最优」和「识别不用优化」两套模板,继续练那份「先写对、再判断要不要优化」的判断力。这些是经典训练题,不是真题,也不做任何押题。 - [邻接表详解:图的存储结构](https://www.codebrick.tech/ds-blog/posts/graph/adjacency-list.md): 408考研数据结构——邻接表存储图的方法详解与邻接矩阵互转。 - [邻接矩阵详解:图的存储结构](https://www.codebrick.tech/ds-blog/posts/graph/adjacency-matrix.md): 408考研数据结构——邻接矩阵存储图的方法详解与度计算。 - [BFS 求无权图最短路径](https://www.codebrick.tech/ds-blog/posts/graph/bfs-shortest.md): 408考研数据结构——BFS 求无权图最短路径的算法详解与可视化演示。 - [广度优先搜索(BFS)详解](https://www.codebrick.tech/ds-blog/posts/graph/bfs.md): 408考研数据结构——图的广度优先搜索算法详解与可视化演示。 - [图的基本概念:有向/无向、度、连通性](https://www.codebrick.tech/ds-blog/posts/graph/concepts.md): 408考研数据结构——图的基本概念,包括有向图、无向图、度、连通性、强连通分量等。 - [关键路径详解:AOE 网](https://www.codebrick.tech/ds-blog/posts/graph/critical-path.md): 408考研数据结构——AOE 网中关键路径的求解方法详解与可视化演示。 - [十字链表与邻接多重表](https://www.codebrick.tech/ds-blog/posts/graph/cross-list.md): 408考研数据结构——十字链表和邻接多重表的存储结构详解。 - [有向无环图(DAG)描述表达式](https://www.codebrick.tech/ds-blog/posts/graph/dag-expression.md): 408考研数据结构——用有向无环图表示含公共子表达式的代数表达式,减少存储冗余。 - [深度优先搜索(DFS)详解](https://www.codebrick.tech/ds-blog/posts/graph/dfs.md): 408考研数据结构——图的深度优先搜索算法详解与可视化演示。 - [Dijkstra 算法详解:单源最短路径](https://www.codebrick.tech/ds-blog/posts/graph/dijkstra.md): 408考研数据结构——Dijkstra 算法求单源最短路径详解与可视化演示。 - [Floyd 算法详解:多源最短路径](https://www.codebrick.tech/ds-blog/posts/graph/floyd.md): 408考研数据结构——Floyd 算法求所有顶点间最短路径详解与可视化演示。 - [Kruskal 算法详解:最小生成树](https://www.codebrick.tech/ds-blog/posts/graph/kruskal.md): 408考研数据结构——Kruskal 算法求最小生成树详解与可视化演示。 - [Prim 算法详解:最小生成树](https://www.codebrick.tech/ds-blog/posts/graph/prim.md): 408考研数据结构——Prim 算法求最小生成树详解与可视化演示。 - [拓扑排序详解:BFS 入度法与 DFS 逆拓扑](https://www.codebrick.tech/ds-blog/posts/graph/topological-sort.md): 408考研数据结构——拓扑排序的 BFS 入度法和 DFS 逆拓扑序实现详解。 - [算法和算法评价](https://www.codebrick.tech/ds-blog/posts/intro/complexity.md): 408考研数据结构——算法的定义与五个特性、时间复杂度与空间复杂度的分析方法。 - [数据结构的基本概念](https://www.codebrick.tech/ds-blog/posts/intro/concepts.md): 408考研数据结构——数据、数据元素、数据结构三要素(逻辑结构、存储结构、数据运算)与抽象数据类型。 - [循环链表详解:循环单链表与循环双链表](https://www.codebrick.tech/ds-blog/posts/linear/circular-linked-list.md): 408考研数据结构——循环单链表和循环双链表的结构与操作详解。 - [线性表的定义与基本概念](https://www.codebrick.tech/ds-blog/posts/linear/concepts.md): 408考研数据结构——线性表的定义、逻辑结构、存储结构分类,以及顺序表与链表的对比。 - [双链表详解:插入、删除操作](https://www.codebrick.tech/ds-blog/posts/linear/doubly-linked-list.md): 408考研数据结构——双链表的插入和删除操作详解与交互可视化演示。 - [链表题的三种通用解法:快慢指针、双指针定位、有序合并](https://www.codebrick.tech/ds-blog/posts/linear/linked-list-algorithms.md): 408考研数据结构——链表算法设计的三种通用指针技巧:快慢指针找中点、双指针找倒数第k个结点、有序链表合并,含各自的循环不变量、正确性论证与适用条件。 - [顺序表详解:插入、删除、按值查找](https://www.codebrick.tech/ds-blog/posts/linear/sequential-list.md): 408考研数据结构——顺序表(数组)的核心操作详解与交互可视化演示,涵盖插入、删除、按值查找等考纲要求的全部操作。 - [单链表详解:头插法、尾插法、插入、删除、逆置](https://www.codebrick.tech/ds-blog/posts/linear/singly-linked-list.md): 408考研数据结构——单链表的核心操作详解与交互可视化演示,涵盖头插法、尾插法、插入、删除、逆置等考纲要求的全部操作。 - [静态链表详解:基本操作](https://www.codebrick.tech/ds-blog/posts/linear/static-linked-list.md): 408考研数据结构——静态链表的概念、存储结构与基本操作详解。 - [B+ 树详解:结构对比](https://www.codebrick.tech/ds-blog/posts/search/b-plus-tree.md): 408考研数据结构——B+ 树的结构特点及与 B 树的对比分析。 - [B 树详解:插入、删除、查找](https://www.codebrick.tech/ds-blog/posts/search/b-tree.md): 408考研数据结构——B 树的插入、删除、查找操作详解与可视化演示。 - [折半查找(二分查找)详解:判定树与 ASL](https://www.codebrick.tech/ds-blog/posts/search/binary-search.md): 408考研数据结构——折半查找(二分查找)的判定树构造与 ASL 计算详解。 - [分块查找详解:索引顺序查找](https://www.codebrick.tech/ds-blog/posts/search/block-search.md): 408考研数据结构——分块查找(索引顺序查找)的原理与 ASL 分析。 - [查找算法分析与对比](https://www.codebrick.tech/ds-blog/posts/search/comparison.md): 408考研数据结构——各查找算法的 ASL 汇总与适用场景对比分析。 - [查找基本概念:ASL 与查找分析](https://www.codebrick.tech/ds-blog/posts/search/concepts.md): 408考研数据结构——查找的基本概念、ASL(平均查找长度)及查找成功/失败分析。 - [哈希表详解:拉链法](https://www.codebrick.tech/ds-blog/posts/search/hash-chaining.md): 408考研数据结构——哈希表拉链法(链地址法)的原理与操作详解。 - [哈希表详解:开放定址法](https://www.codebrick.tech/ds-blog/posts/search/hash-open-addressing.md): 408考研数据结构——哈希表开放定址法(线性探测、二次探测)详解。 - [顺序查找详解:ASL 计算](https://www.codebrick.tech/ds-blog/posts/search/sequential-search.md): 408考研数据结构——顺序查找算法详解与 ASL 计算。 - [折半插入排序详解](https://www.codebrick.tech/ds-blog/posts/sorting/binary-insertion-sort.md): 408考研数据结构——折半插入排序算法详解与可视化演示。 - [冒泡排序详解](https://www.codebrick.tech/ds-blog/posts/sorting/bubble-sort.md): 408考研数据结构——冒泡排序算法详解与可视化演示。 - [排序算法对比与性能实测](https://www.codebrick.tech/ds-blog/posts/sorting/comparison.md): 408考研数据结构——十大排序算法全面对比:时间复杂度、空间复杂度、稳定性总结,配合实测性能曲线验证理论分析。 - [排序的定义与基本概念](https://www.codebrick.tech/ds-blog/posts/sorting/concepts.md): 408考研数据结构——排序的定义、内部排序与外部排序、排序的稳定性、各类排序算法分类。 - [计数排序详解](https://www.codebrick.tech/ds-blog/posts/sorting/counting-sort.md): 408考研数据结构——计数排序算法详解,非比较排序的线性时间排序方法。 - [外部排序详解:多路归并](https://www.codebrick.tech/ds-blog/posts/sorting/external-sort.md): 408考研数据结构——外部排序的多路归并概念与败者树详解。 - [堆排序详解:含建堆过程](https://www.codebrick.tech/ds-blog/posts/sorting/heap-sort.md): 408考研数据结构——堆排序算法详解,包含建堆过程与可视化演示。 - [由中间状态反推排序算法:从不变量到判别依据](https://www.codebrick.tech/ds-blog/posts/sorting/identify-state.md): 408考研数据结构——每种排序在一趟后留下什么结构性特征:八种排序的不变量与由此推出的中间状态、判别依据、同一序列的对照实验,以及「违反不变量即可排除」的反向用法。 - [直接插入排序详解](https://www.codebrick.tech/ds-blog/posts/sorting/insertion-sort.md): 408考研数据结构——直接插入排序算法详解与可视化演示。 - [归并排序详解:二路归并](https://www.codebrick.tech/ds-blog/posts/sorting/merge-sort.md): 408考研数据结构——二路归并排序算法详解与可视化演示。 - [快速排序详解](https://www.codebrick.tech/ds-blog/posts/sorting/quick-sort.md): 408考研数据结构——快速排序算法详解与可视化演示,包含分区过程和递归分析。 - [基数排序详解](https://www.codebrick.tech/ds-blog/posts/sorting/radix-sort.md): 408考研数据结构——基数排序算法详解与可视化演示。 - [简单选择排序详解](https://www.codebrick.tech/ds-blog/posts/sorting/selection-sort.md): 408考研数据结构——简单选择排序算法详解与可视化演示。 - [希尔排序详解](https://www.codebrick.tech/ds-blog/posts/sorting/shell-sort.md): 408考研数据结构——希尔排序(缩小增量排序)算法详解与可视化演示。 - [数组与特殊矩阵的压缩存储](https://www.codebrick.tech/ds-blog/posts/stack-queue/array-matrix.md): 408考研数据结构——数组的行优先/列优先存储、对称矩阵、三角矩阵、三对角矩阵的压缩存储公式与手算示例。 - [多维数组的存储:行优先与列优先地址计算](https://www.codebrick.tech/ds-blog/posts/stack-queue/array-storage.md): 408考研数据结构——多维数组在内存中如何线性存储。行优先 / 列优先地址公式的完整推导、用两个基准点反推每行列数、1-base 与 0-base 的转换在哪一步做,以及推广到三维与 n 维的映像函数。 - [括号匹配:栈的经典应用](https://www.codebrick.tech/ds-blog/posts/stack-queue/bracket-matching.md): 408考研数据结构——利用栈实现括号匹配的算法详解与可视化演示。 - [循环队列详解:入队、出队、判满判空](https://www.codebrick.tech/ds-blog/posts/stack-queue/circular-queue.md): 408考研数据结构——循环队列的入队、出队操作及判满判空条件详解。 - [栈和队列的定义与基本概念](https://www.codebrick.tech/ds-blog/posts/stack-queue/concepts.md): 408考研数据结构——栈和队列的定义、特点、操作受限的线性表本质,以及各种实现形式的关系。 - [双端队列详解:输入受限与输出受限](https://www.codebrick.tech/ds-blog/posts/stack-queue/deque.md): 408考研数据结构——双端队列的输入受限和输出受限类型详解。 - [表达式求值:中缀转后缀与后缀求值](https://www.codebrick.tech/ds-blog/posts/stack-queue/expression-eval.md): 408考研数据结构——利用栈实现中缀表达式转后缀表达式及后缀表达式求值。 - [链栈详解:入栈、出栈操作](https://www.codebrick.tech/ds-blog/posts/stack-queue/linked-stack.md): 408考研数据结构——链栈的入栈和出栈操作详解与交互可视化演示。 - [链式队列详解:入队、出队操作](https://www.codebrick.tech/ds-blog/posts/stack-queue/queue.md): 408考研数据结构——链式队列的入队和出队操作详解与交互可视化演示。 - [栈在递归中的应用](https://www.codebrick.tech/ds-blog/posts/stack-queue/recursion.md): 408考研数据结构——递归的工作原理、系统栈与递归调用的关系、递归转非递归。 - [顺序栈详解:入栈、出栈操作](https://www.codebrick.tech/ds-blog/posts/stack-queue/sequential-stack.md): 408考研数据结构——顺序栈的入栈、出栈操作详解与交互可视化演示。 - [共享栈详解:两栈共享空间](https://www.codebrick.tech/ds-blog/posts/stack-queue/shared-stack.md): 408考研数据结构——共享栈(两栈共享空间)的原理与操作详解。 - [特殊矩阵的压缩存储:对称、三角、三对角、稀疏](https://www.codebrick.tech/ds-blog/posts/stack-queue/special-matrix.md): 408考研数据结构——四类特殊矩阵压缩存储的完整推导:对称矩阵上三角行优先/列优先、三角矩阵、三对角矩阵带状结构、稀疏矩阵三元组与十字链表,含下标映射与逆映射的逐步推导。 - [朴素模式匹配(BF 算法)详解](https://www.codebrick.tech/ds-blog/posts/string/bf.md): 408考研数据结构——朴素模式匹配(暴力匹配)算法详解与可视化演示。 - [串的定义与基本概念](https://www.codebrick.tech/ds-blog/posts/string/concepts.md): 408考研数据结构——串的定义、基本术语、存储结构,以及模式匹配问题概述。 - [拓展:从 KMP 到工业级全文搜索](https://www.codebrick.tech/ds-blog/posts/string/full-text-search.md): KMP 之后,工业界是怎么做全文搜索的?详解 BF / KMP / 倒排索引三种算法在全文场景下的对比,附 ds-blog 搜索框可切换算法实测。 - [KMP 算法详解:含 next 数组求解过程](https://www.codebrick.tech/ds-blog/posts/string/kmp.md): 408考研数据结构——KMP 模式匹配算法详解,包含 next 数组的求解过程与可视化演示。 - [平衡二叉树(AVL)详解:四种旋转与插入删除](https://www.codebrick.tech/ds-blog/posts/tree/avl.md): 408考研数据结构——AVL 树的四种旋转(LL/RR/LR/RL)、插入和删除操作详解。 - [二叉排序树(BST)详解:查找、插入、删除](https://www.codebrick.tech/ds-blog/posts/tree/bst.md): 408考研数据结构——二叉排序树的查找、插入、删除操作详解与可视化演示。 - [树与二叉树的定义与基本概念](https://www.codebrick.tech/ds-blog/posts/tree/concepts.md): 408考研数据结构——树的定义、基本术语、二叉树的定义与性质、特殊二叉树,以及树与二叉树的关系。 - [由遍历序列构造二叉树](https://www.codebrick.tech/ds-blog/posts/tree/construct-binary-tree.md): 408考研数据结构——通过前序+中序、后序+中序序列构造二叉树的算法详解。 - [树与森林和二叉树的转换](https://www.codebrick.tech/ds-blog/posts/tree/forest-conversion.md): 408考研数据结构——树与森林转换为二叉树的方法详解与可视化演示。 - [树与森林:三种存储结构与遍历对应关系](https://www.codebrick.tech/ds-blog/posts/tree/general-tree.md): 408考研数据结构——一般树(非二叉树)的双亲表示法、孩子表示法、孩子兄弟表示法,以及树/森林/二叉树三者遍历的一一对应。 - [堆详解:大根堆/小根堆与上浮下沉操作](https://www.codebrick.tech/ds-blog/posts/tree/heap.md): 408考研数据结构——堆的定义与本质、顺序存储的下标关系、上浮与下沉调整、O(n) 建堆推导、堆插入与删除、堆与优先队列。 - [哈夫曼树详解:构建过程与哈夫曼编码](https://www.codebrick.tech/ds-blog/posts/tree/huffman.md): 408考研数据结构——哈夫曼树的构建过程和哈夫曼编码详解与可视化演示。 - [中序遍历详解:递归与非递归实现](https://www.codebrick.tech/ds-blog/posts/tree/inorder.md): 408考研数据结构——二叉树中序遍历的递归和非递归实现详解与可视化演示。 - [层序遍历详解:BFS 实现](https://www.codebrick.tech/ds-blog/posts/tree/level-order-traversal.md): 408考研数据结构——二叉树层序遍历(BFS)详解与可视化演示。 - [后序遍历详解:递归与非递归实现](https://www.codebrick.tech/ds-blog/posts/tree/postorder.md): 408考研数据结构——二叉树后序遍历的递归和非递归实现详解与可视化演示。 - [前序遍历详解:递归与非递归实现](https://www.codebrick.tech/ds-blog/posts/tree/preorder.md): 408考研数据结构——二叉树前序遍历的递归和非递归实现详解与可视化演示。 - [红黑树详解:五条性质、插入与删除](https://www.codebrick.tech/ds-blog/posts/tree/rbt.md): 408考研数据结构——红黑树的五条性质、插入与删除调整过程详解与可视化演示。 - [线索二叉树详解:中序线索化与前驱后继](https://www.codebrick.tech/ds-blog/posts/tree/threaded-binary-tree.md): 408考研数据结构——线索二叉树的中序线索化过程及找前驱后继详解。 - [并查集详解:Union-Find 操作与优化](https://www.codebrick.tech/ds-blog/posts/tree/union-find.md): 408考研数据结构——并查集(不相交集合)的存储结构、Find与Union操作、路径压缩与按秩合并优化详解。