返回上一级
1525 字
8 分钟
课程地图

这套课是什么#

项内容
课程数据结构
讲师Harsha Suryanarayana(mycodeschool),中文配音:外影译坊
地址BV1Jr4RemEHY
规模42 集 / 约 564 分钟(9.4 小时)/ 平均 13 分钟一集
先修C 语言指针 + 动态内存分配
定位用 C/C++ 手写实现每一种数据结构,不是调库

这套课的特点#

讲课方式是「边画图边写代码」,每一集基本都是:先画结构图讲清思路 → 再一行行写 C/C++ 代码 → 最后讲复杂度和边界情况。

几个贯穿全课的约定:

约定内容
高度定义用「边数」定义:空树高度 = −1,叶节点高度 = 0
深度定义根节点深度 = 0
数组下标0-based
链表位置1-based(长度为 n 的链表最大合法插入位置是 n+1)
head 是什么指向头节点的指针,不是头节点本身
NULL就是地址 0,用来标记链表末尾
「路径」默认指简单路径;允许重复叫「漫步」

这套课的字幕是 AI 识别的,同音字错极多(「店主」=电阻、「试播器」=示波器这类)。本笔记已按上下文还原,凡是识别不清或口误自相矛盾的地方,都用 [待确认] 标出来了。

全目录与章节对照#

集时长(分)标题对应章节
p16.31.数据结构:课程导论导论与抽象数据类型
p212.62.抽象数据类型:ADT导论与抽象数据类型
p316.63.链表:基本介绍链表(一)基础与数组对比
p411.84.数组 vs 链表链表(一)基础与数组对比
p513.45.链表:C_C++实现链表(二)C 实现与头部插入
p612.36.链表:头部插入一个节点链表(二)C 实现与头部插入
p714.77.链表:任意位置插入一个节点链表(三)任意位置插入与删除
p812.08.链表:任意位置删除一个节点链表(三)任意位置插入与删除
p913.39.链表:反转一个链表 ( 迭代方式实现 )链表(四)反转与递归
p1013.810.链表:打印一个链表 ( 递归方式实现 )链表(四)反转与递归
p118.611.链表:反转一个链表 ( 递归方式实现 )链表(四)反转与递归
p126.912.链表:双向链表的介绍双向链表
p1314.813.链表:双向链表的实现双向链表
p148.114.栈:基本介绍栈
p1512.715.栈:使用数组实现一个栈栈
p1610.616.栈:使用链表实现一个栈栈
p1715.817.栈:反转一个字符串或者反转一个链表 ( 使用栈来实现 )栈
p1813.718.栈:检查括号的匹配性 ( 使用栈来实现 )栈
p1913.119.栈:中缀, 前缀, 后缀的基本概念栈的应用 前缀 中缀 后缀
p2013.620.栈:前缀, 后缀表达式求值 ( 使用栈来实现 )栈的应用 前缀 中缀 后缀
p2117.621.栈:中缀到后缀表达式的转换 ( 使用栈来实现 )栈的应用 前缀 中缀 后缀
p229.022.队列:基本介绍队列
p2314.423.队列:使用数组实现一个队列队列
p2413.724.队列:使用链表实现一个队列队列
p2515.225.树:基本介绍树与二叉树
p2615.726.树:二叉树树与二叉树
p2718.727.树:二叉搜索树二叉搜索树
p2817.928.树:二叉搜索树 (C_C++实现)二叉搜索树
p2912.629.树:二叉搜索树 (C_C++实现) - 内存中的栈与堆详解内存中的栈与堆
p305.630.树:二叉搜索树 - 查找最小值和最大值BST 查找最值与二叉树的高度
p316.931.树:二叉树的高度BST 查找最值与二叉树的高度
p3211.432.树:二叉树的遍历 - 广度优先 vs 深度优先二叉树的遍历
p3310.933.树:二叉树的层次遍历二叉树的遍历
p3413.934.树:二叉树的前序, 中序, 后序遍历二叉树的遍历
p3515.935.树:判断是否为二叉搜索树判断 BST 与删除节点
p3617.836.树:二叉搜索树中删除一个节点判断 BST 与删除节点
p3717.337.树:二叉搜索树的中序后继节点判断 BST 与删除节点
p3816.138.图:基本介绍图
p3914.739.图:图的一些基本属性图
p4013.240.图:图的表示法(第1部分:边列表)图
p4114.241.图:图的表示法(第2部分:邻接矩阵)图
p4226.842.图:图的表示法(第3部分:邻接表)图

数据结构全貌#

线性结构
├── 数组 连续内存,随机访问 O(1),插入删除 O(n)
├── 链表 离散内存 + 指针,插入删除 O(1)(已知位置时),访问 O(n)
│ └── 双向链表 多一个 prev 指针,能反向走,单指针即可删除
├── 栈 单侧开口,LIFO,push/pop 都是 O(1)
└── 队列 两侧开口,FIFO,enqueue/dequeue 都是 O(1)
非线性结构
├── 树 层级结构,N 个节点恰好 N−1 条边
│ └── 二叉搜索树 平均 O(log N),最坏 O(N)(退化成链表)
└── 图 没有支配连接的规则,树只是图的特例
├── 边列表 O(|V|+|E|) 空间,但找邻居 O(|E|)
├── 邻接矩阵 O(V²) 空间,判断相连 O(1),适合密集图
└── 邻接表 O(|V|+|E|) 空间,适合稀疏图

复杂度总表#

数据结构访问查找插入删除空间
数组(有序 + 二分)O(1)O(log N)O(N)O(N)O(N)
链表O(N)O(N)O(1)(头部)O(1)(已知前驱)O(N)
双向链表O(N)O(N)O(1)O(1)(单指针即可)O(N)
栈O(1)(栈顶)—O(1)O(1)O(N)
队列O(1)(队头)—O(1)O(1)O(N)
BST(平衡)O(log N)O(log N)O(log N)O(log N)O(N)
BST(最坏)O(N)O(N)O(N)O(N)O(N)

怎么用这份笔记#

每一章对应视频里的一段。每章结构:核心概念 → 代码/算法 → 复杂度 → 坑。

这套课的笔记里「坑」那部分特别值得看。边界情况本来就容易错,连课上写的代码也会漏(比如删除函数忘了 return),这些都是真实会犯的错。

建议动手顺序:

① 链表三章(p3-p13)—— 把指针彻底搞明白,后面全靠这个
② 栈和队列(p14-p24)—— 实现简单,但边界条件最容易错
③ 树(p25-p37)—— 重点是递归,尤其是插入为什么必须接住返回值
④ 图(p38-p42)—— 重点理解三种表示法的取舍
课程地图
https://me.622168.xyz/posts/data-structure/00-course-map/
作者
Shaw 的小屋
发布于
2026-09-18
许可协议
CC BY-NC-SA 4.0