数据结构与算法PPT截图这样用:从图库变复习地图

发布时间:2026/10/14 21:07:21
数据结构与算法PPT截图这样用:从图库变复习地图
简介这套课件截图合集来自青岛大学王卓教授主讲的数据结构与算法课程是计算机专业学生、考研备考者和自学者梳理核心知识点的实用资料。内容沿课程目录展开先讲绪论、数据元素与数据项、逻辑结构与物理结构再深入线性表的定义、顺序表示和链式表示同时覆盖数据类型与抽象数据类型、算法与程序的区别以及算法时间效率度量、时间复杂度阶数等高频考点。通过清晰的章节划分和原版课件截图读者可以快速定位顺序表与链表操作的实现细节理解不同存储结构的特点。整个压缩包内只有一个PDF文档容量约102.64MB带有清晰章节目录便于离线查看或配合视频课程反复学习。目前已有4537人学习下载内容覆盖从基础概念到线性表实现的核心脉络尤其适合考前突击、课后巩固和面试前系统回顾。1. 某高校数据结构与算法课程PPT截图别把它当图库要当复习地图期末周把手机里存的几十张某高校《数据结构与算法》课程PPT截图从头翻到尾合上手机却只记得几个红圈——这种体验我太熟了。不少人把这套课件截图当成“图库”存着以为存了就是学了真到写代码、做卷子时又回到原点。我的判断是这套PPT截图本身不提供任何魔法真正值钱的是它背后的知识组织方式把零散截图按章节归位和课本、刷题错题、复杂度推导绑在一起它才从图片垃圾变成复习地图。这篇文章写给三类人期末突击的自考生、备考408的考研党、正在补算法基础的转码同学目标只有一个——让你手里的截图真正派上用场。2. 这套PPT的知识主线从线性表到图再到排序的完整闭环2.1 线性结构与树的过渡PPT前半程的推进逻辑拿到一套课件先别急着逐页截屏而是要看目录页。常见版式下数据结构课程的推进顺序是绪论与算法分析 → 线性表 → 栈与队列 → 串 → 数组与广义表 → 树与二叉树 → 图 → 查找 → 排序。这套顺序不是随意排的它是按“数据元素之间的关系”从简单到复杂搭起来的线性结构是一对一树是一对多图是多对多。学线性表时理解的是“前驱/后继”的约束到树这里变成“父/子”和“祖先/后代”到图则彻底放开为任意两点之间都可能相连。PPT前半程里最容易被忽略的是“小结页”——很多老师会把这一章的ADT操作和复杂度总结在一页里这是最好的复习锚点截图时务必带上。从操作实践来看我会用10分钟把全部PPT截图按章节目录重命名一遍而不是按时间顺序堆着。命名规则类似02_线性表_顺序表vs链表.png这样做的好处是后期用文件管理器一搜就能定位。数据结构这门课的知识颗粒度很密如果连“哪章讲了什么”都没建立后面刷题会频繁翻车。另一种常见做法是把截图导入笔记软件后再建章节索引这样文字备注能和图片并存比单纯存在相册里强得多。2.2 查找与排序后半程的工程味道课程后半程的查找和排序是整门课里“工程味道”最重的部分。查找这一模块从静态查找表顺序查找、折半查找、分块查找切入再进入动态查找表二叉排序树、平衡二叉树、B树最后是哈希表。排序则是插入排序、交换排序、选择排序、归并排序、基数排序五条线并行。这套PPT讲这两个模块时通常会给一张汇总对照表把时间复杂度、空间复杂度、稳定性一次性丢出来。凡是在截图里看到的这类表格都值得单独存档——它直接对应面试和考试里的高频选择题。我在复习排序时会把课上表格抄成一版自己的加上“最好情况”和“最坏情况”两列因为PPT里常只写平均复杂度。比如快速排序平均O(n log n)、最坏O(n^2)堆排序最坏也是O(n log n)这些“边界让人意外”的点是出题人最爱挖的坑。下面这张表可以对照PPT原表补全后使用排序算法平均复杂度最坏复杂度空间复杂度稳定性直接插入O(n^2)O(n^2)O(1)稳定希尔约O(n^1.3)O(n^2)O(1)不稳定冒泡O(n^2)O(n^2)O(1)稳定快速O(n log n)O(n^2)O(log n)不稳定堆排序O(n log n)O(n log n)O(1)不稳定归并O(n log n)O(n log n)O(n)稳定2.3 复杂度分析这条暗线截图里最值得抄的批注这套PPT里最容易被当作“背景板”划走的内容是每个算法旁边标注的大O复杂度。我看过不少同学的笔记代码抄得工工整整复杂度那一栏永远是空白的——这是本末倒置。复杂度的意义不在于背结论而在于培养“输入规模变了之后算法表现怎么变”的直觉。老师在PPT上用红笔圈出的O(log n)或“最坏O(n^2)”批注往往正是考试里“为什么不用别的方法”的答案来源。复习时我习惯把每个算法的“复杂度为什么是这样”用一句话写在截图边上比如归并排序的O(n log n)是“每层总代价O(n)共有log n层”推出来的快排的最坏情况是“每次基准都选到极值导致分割严重不平衡”。写不出这句话说明你还没真懂这个算法。这条暗线贯穿全课程任何一章跳过它后面都会在题目的时间限制上还债。3. 把截图转成自己的知识库三条精读路线与一套笔记模板3.1 路线一按章节精读并用主动回忆验收面向期末和考研复习最稳的路线是“精读一遍 主动回忆 对照补漏”。先说精读把每一章的PPT截图当成讲义按小节顺序读而不是按截图拍摄时间读。每读完一节立刻做一件反人性的事——合上截图在一张白纸上默写这一节的核心内容。例如读完“栈”这一节你要能写出栈的ADT操作InitStack、Push、Pop、GetTop、Empty和顺序栈的判空判满条件写不出来就回去再看重点记你漏掉的部分。我做这个步骤时用Markdown建了一个笔记文件每章一个。模板大概长这样# 03 栈与队列 ## 顺序栈 ADT - 存储结构ElemType data[MAXSIZE]; int top; - 核心操作InitStack / Push / Pop / GetTop / StackEmpty - 判空top -1判满top MAXSIZE - 1 - 复杂度Push、Pop 都是 O(1) ## 易错点 - top 指向栈顶元素 vs 指向栈顶下一位不同教材有差异 - 链栈不需要判满但要注意栈空时 Pop 会下溢这个模板的逻辑是“存储结构 / 操作 / 复杂度 / 易错点”四段式。参数说明这里的MAXSIZE是顺序栈的最大容量考试中常见取值是100或1000不需要背具体值但要记住栈满条件是top与MAXSIZE的关系。写完笔记后把对应PPT截图用文件管理器拖进相同编号的文件夹保证“笔记和截图一一对应”。主动回忆这一条是分清“我看过”和“我会了”的分水岭。3.2 路线二用错题反向定位PPT知识点第二种路线适合已经在刷题的人。刷题遇到不会的题典型的做法是看题解、背代码、下一题但这样刷一百题也建立不起体系。我的做法是反向建立映射每道错题强制自己回答三个问题——题目考的是哪个知识点、这套PPT里有没有对应章节、我错在哪一步。回答完就形成一个索引表下次整理时按知识点归并你很快会发现自己的薄弱区集中在哪几个章节。错题记录表我常用四列题目来源考点PPT章节错误原因复刷日期某套期末卷二叉树层序遍历第6章 树忘了先存当前层size已复刷这张表的杀伤力在于刷题不会的题回到PPT某一页重新精读比反复看题解有效得多。我见过一个反面教材A同学刷了几百道题错题集里翻烂了也没分过类考前一模一样的考点还是错——因为他从没让错题“指回”课件。如果你用的是笔记软件可以在错题记录里直接链接到对应PPT截图复习时一点就跳转效率更高。3.3 路线三做一页纸速查表第三路线是我最推荐考前用的把每章压缩成一页纸速查表。它是上面路线一的产物精读完一章后用表格把这章的核心考点总结出来。数据结构这门课考点非常集中一页纸足够装下本章80%的考点。做速查表时注意两点一是排除推导过程只留结论和易错点二是把“易错点”单独设一列写满你曾经踩过的坑。章节核心考点高频易错点复杂度偏好线性表顺序表/链表插入删除链表指针丢失链表中O(1)插入栈与队列进出栈序列、队循环判空判满条件均摊O(1)树遍历、线索化、平衡递归终止条件高度O(log n)图遍历、最短路径、拓扑递归栈溢出、visited漏标Dijkstra O(n^2)查找BST、AVL、哈希哈希冲突链长哈希均摊O(1)排序5类排序对比快排最坏退化归并空间O(n)这张表做出来后考前扫一眼就够不用再翻几十张截图。我做速查表时会把PPT里的“老师强调”部分直接搬进“高频易错点”列因为这些内容通常是画重点时被反复提的。3.4 截图管理的工具习惯重命名、标签与反向链接最后一个习惯是关于工具的。截图攒多了之后最可怕的不是“找不到文件”而是“找到文件但想不起它是干嘛的”。我的办法有三个第一每张截图按“章节号_主题_类型”重命名例如05_树_前序遍历伪代码.png删除手机里默认的IMG_20240301_103020.jpg这类无意义文件名。第二给重要截图打标签工具上用支持标签的笔记软件都行标签体系建议按“考点属性”分比如#复杂度、#边界条件、#易错点而不是按拍摄时间分。第三做反向链接在笔记正文里引用某张图时直接把图片插入并把记忆锚点写成一句话这样复习时看到的不是孤立图片而是“图片你的理解”二合一结构。这三步做完几十张截图才算真正进入你的知识体系而不是躺在相册里吃灰。4. 课件里的关键算法逐段拆解边界条件与参数怎么设4.1 快速排序基准选取决定你是O(n^2)还是O(n log n)快速排序是这套PPT里出镜率最高的算法之一也是面试手撕题的重灾区。课件里通常讲两种分区写法挖坑法和交换法。思路一样但代码细节决定成败。我常用的是双指针交换法def quick_sort(arr, left, right): if left right: # 递归终止区间长度小于等于1 return pivot arr[(left right) // 2] # 取中位数做基准避免有序输入退化 i, j left, right while i j: while arr[i] pivot: i 1 while arr[j] pivot: j - 1 if i j: arr[i], arr[j] arr[j], arr[i] i 1 j - 1 quick_sort(arr, left, j) # 左半区间继续递归 quick_sort(arr, i, right) # 右半区间继续递归逻辑说明这段代码用两个指针从两端向中间扫描碰到等于pivot的元素也交换避免左右区间失衡后死循环。参数说明里最关键的是递归边界left right和while i j这个判断如果写成i j当arr[i]、arr[j]都等于pivot时会出现无限递归这是PPT演示里不会画出来的坑。基准取中位数是我强烈建议的默认做法——如果固定取arr[left]遇到本就升序排列的输入快排会稳定退化成O(n^2)这在数据量稍大时直接超时。顺带一提递归深度在这段代码里最坏是O(n)而不是O(log n)这取决于基准。如果面试官追问你答“取中位数能明显改善但无法杜绝最坏情况”就是加分点。刷题时用随机基准更稳但考试手写代码取中位数更直观。PPT上通常展示的是固定取首元素或末元素的版本代码在数组有序时会明显变慢这也是一个值得在笔记里标注的边界。4.2 二叉树层序遍历队列的size参数为什么必须先存二叉树这一章课件最爱考层序遍历。思路不复杂用队列保存节点出队时把左右孩子入队。但它有一个几乎所有新手都会踩的坑——遍历当前层的同时把下一层节点入队导致循环里处理了不该处理的节点。正确做法是先把当前层节点数存成size再循环size次from collections import deque def level_order(root): if not root: return [] res [] q deque([root]) while q: level [] size len(q) # 关键必须先保存当前层节点数 for _ in range(size): node q.popleft() level.append(node.val) if node.left: q.append(node.left) if node.right: q.append(node.right) res.append(level) return res逻辑说明如果不存sizefor循环的范围会随着入队动态变大导致本属于下一层的节点被当成当前层处理输出的层结构就错乱。参数说明里size len(q)必须在for之前取值如果写在for内部那就等于没存。还有一个容易忽略的边界root为空时直接返回空列表不加这一句就会在popleft时抛异常。层序遍历的时间复杂度是O(n)空间复杂度最坏O(n)满二叉树的最后一层节点数。这套PPT里如果画出了队列的动态变化图那张截图一定要仔细看——它比文字描述直观得多。复习时把“size先存”这四个字写在截图旁边考场上就不容易犯错。4.3 Dijkstradist数组从INF到最短路的更新顺序图论章节里的DijkstraPPT上会用一张表逐步列出dist数组的变化。很多人只看最终结果从不手推中间过程结果一到“写出某一步的dist数组”就卡壳。算法本身是贪心每次从未确定最短路的节点里选dist最小的用它去松弛邻居。用优先队列实现是最常见写法import heapq def dijkstra(graph, start): n len(graph) dist [float(inf)] * n dist[start] 0 pq [(0, start)] visited [False] * n # 记录节点是否已确定最短路 while pq: d, u heapq.heappop(pq) if visited[u]: continue # 队列里已有更短路径被处理过跳过 visited[u] True for v, w in graph[u]: if not visited[v] and d w dist[v]: dist[v] d w heapq.heappush(pq, (dist[v], v)) return dist逻辑说明这里的visited不是DFS里的“访问过”而是“最短路已确定”。dist数组的更新顺序必须是“先选最小dist再松弛邻居”不能反过来否则贪心性质就崩了。参数说明graph是邻接表形如[[(1, 2), (3, 5)], ...]每个元素是(邻居, 权重)二元组start是起点编号dist初始化为float(inf)表示不可达。手推PPT上的dist表时建议在纸上把“本轮选中的节点”画个星号再更新它的邻居总共执行n次。我带的同学里凡是能连续手推三遍Dijkstra的写代码基本没有错过。优先队列写法的时间复杂度是O((nm) log n)稠密图建议用朴素O(n^2)实现这也算一个值得在笔记里标注的选型边界。注意Dijkstra不能处理负权边PPT里如果出现负权图示例通常是为了说明为什么必须换Bellman-Ford。4.4 KMP的next数组课件里最劝退处的两个约定每次讲到字符串匹配的KMP课堂上都会倒下一片人。PPT上最劝退的就是next数组的两种不同约定。一种是严版教材的next[0] -1另一种是很多网课用的next[0] 0两者推导方式不同代码也略微不同。我下面的实现是后一种适合直接套用def build_next(p): n len(p) nxt [0] * n j 0 for i in range(1, n): while j 0 and p[i] ! p[j]: j nxt[j - 1] # 回溯到次长公共前后缀 if p[i] p[j]: j 1 nxt[i] j return nxt逻辑说明next[i]表示p[:i1]的最长公共前后缀长度。当匹配失败时j不必归零而是跳到nxt[j-1]这一跳就是KMP比朴素匹配高效的全部秘密。参数说明里要注意while循环写的是j 0而不是j 0否则j可能变成-1导致数组越界。i始终不回退只有j在回退——这就是“主串不回溯”原则。对着PPT复习KMP时最有效的办法是用p ababc这样的短串手算一遍next数组把每一轮的i、j、nxt[i]列成一张三行表。算完之后再回来看PPT上那张匹配过程图你会发现自己之前看不懂的滑动画线其实每一步都对应这里的一次j nxt[j - 1]。两种约定造成的差异只体现在next[0]和匹配失败时的跳转起点核心思想完全一样考试时认准教材那一套写就行。5. 用这套PPT最常见的五个翻车现场与排查方法5.1 只存截图不精读期末翻相册翻到崩溃现象手机相册里躺着上百张PPT截图期末复习时一张张划过去划到一半就忘了前面讲了什么心态直接崩。原因没有给截图建立任何组织结构时间顺序和知识顺序完全无关。解决用第3章的重命名规则先归档一遍再按“精读一节→默写一页→对照补漏”的节奏推进。截图存储位置从相册移到笔记软件让图片跟着章节走而不是跟着时间走。这个习惯花不了半小时但能让期末复习的时间缩短一半。5.2 看懂了PPT但写不出代码缺了编码训练现象PPT上每个算法都觉得“懂了”一上机就白屏连栈的Push都能写错。原因看懂伪代码和能写出可运行代码之间隔着一层“边界条件和语法细节”这一步只能靠手打代码来补。解决每学完一章把PPT上出现的核心算法选两到三个自己动手实现一遍并跑通测试用例。测不过就断点断点不会就回到PPT看伪代码但绝不直接抄。我给自己的规矩是一个算法至少手写过一遍才有资格在笔记里写上“已掌握”。面试手撕算法时这个训练积累出来的肌肉记忆比任何背诵都可靠。5.3 死背复杂度结论被问“为什么”就卡住现象能背出“快排平均O(n log n)”但面试官一问“为什么不是O(n^2)”就语塞。原因把复杂度当成死结论背没有理解推导过程。解决复习时把每个算法的复杂度推导用一句话写进笔记。比如归并排序的log n层从哪来快排的最坏情况是怎么触发的哈希表为什么均摊O(1)。能写出一句话才算真正记住。这一条不仅针对考试实际工程里很多性能问题的排查都要靠这种推导能力判断瓶颈在哪而不是靠搜“哪个排序快”的结论。5.4 课件与教材定义不一致时的处理思路现象课件上说next数组某位置是0教材上是-1于是怀疑自己记错了纠结半天。原因不同教材和不同老师对next数组的约定不同常见分“-1派”和“0派”还有尾部哨兵之类的变体这不代表谁错了。解决以你考试指定的教材为准在笔记里显著标注两个版本的区别并写明自己考试时用哪套。面试时主动说明“我用的是next[0]0的约定”面试官反而会认可你对细节的把控。这个思路同样适用于线索二叉树头结点、哈希冲突处理方法的命名差异。5.5 递归实现反复栈溢出先画递归树再写代码现象二叉树的前序遍历写成了递归数据量一大就栈溢出图的DFS死循环程序卡死不报错。原因递归没有想清楚终止条件和回溯时机或者visited标记漏打。解决写递归前先在白纸上画出递归树标出“什么时候返回、哪些节点需要visited标记”。排查时从三个位置下手——函数入口是否有空判断、递归调用是否往更小的子问题走、visited是否在“进入时”就置位而不是“返回后”。这三板斧能解决绝大多数递归翻车。对照PPT里递归部分的图例逐帧检查通常能精确定位到哪一行漏了条件。6. 进阶用法用这套课件练出算法直觉的三个习惯6.1 用状态图还原算法过程而不是抄代码抄代码是最低效的复习方式。我建议看完一节后把算法用状态图画出来标注输入、每一步的数据结构状态变化、输出。画KMP时画“主串与模式串两个指针的位置变化”画Dijkstra时画“dist数组逐轮更新表”。状态图画完代码是水到渠成的。PPT里的那些过程图页本身就是现成的状态图素材你要做的是把状态变化补全到最终结果。6.2 给每个算法做四行卡片我在复习后期给每个核心算法做一张四行卡片格式是“输入、输出、复杂度、边界”。例如层序遍历输入是二叉树根节点输出是按层分组的节点值列表复杂度是时间O(n)、空间O(n)边界是空树返回空列表、必须先存size。卡片攒到几十张考试和面试前都只需过卡片效率极高。这是把PPT从“讲义”变成“工具”的关键一步——同样的内容换了一种组织形态记忆提取路径就完全不同。6.3 用“数据量放大100倍”倒逼自己选对算法最后一个习惯来自我的血泪经验。我当时觉得顺序查找就够用直到模拟数据量从一万放大到百万O(n^2)的代码跑了十几秒没出结果才意识到复杂度选择的真实意义。从那时起每学一个新算法我都会做一次思想实验如果输入规模放大100倍我的算法会不会崩这个习惯让我在写代码前先停下来想清楚复杂度而不是写完再去优化。数据规模一上来O(n log n)和O(n^2)的差距就是秒级和分钟级的差别这种体感比背任何结论都深刻。我做的最蠢的一件事是集齐了整套课件截图却没手推过KMP结果面试时被追问next数组当场卡壳。后来我给自己立了规矩PPT里出现的每个算法先画状态图、再写四行卡片、最后务必上机跑一遍。希望帮到你。本文还有配套的精品资源点击获取