算法与数据结构体系课

本课程是一门专为希望系统构建算法与数据结构知识体系的开发者打造的“从零到一”体系课。课程以“夯实基础、深入原理、构建体系”为核心,从最简单的线性查找和数组开始,逐步深入到链表、树、堆等复杂数据结构,并系统讲解排序、查找、字符串匹配等核心算法。你将不仅学习如何实现这些算法,更将通过复杂度分析、性能测试和LeetCode实战,深入理解其背后的设计思想与适用场景,最终具备独立分析、设计和优化算法的能力,为技术面试和解决复杂工程问题打下坚实基础。
核心学习路径
1. 基础筑基:数组、链表与复杂度分析
入门与复杂度分析:从“算法有什么用”的哲学问题切入,学习算法的基本概念。通过实现线性查找法,系统掌握时间复杂度与空间复杂度的分析方法,学会使用循环不变量来证明算法的正确性,并动手测试算法性能。
数据结构基础——数组:深入剖析数组的本质,从零开始二次封装一个支持动态扩容的数组。学习增、删、改、查等核心操作,并深入理解均摊复杂度(Amortized Complexity)和如何防止复杂度震荡。
基础数据结构——栈与队列:学习栈(Stack)和队列(Queue)这两种基础数据结构。通过“撤销操作”、“括号匹配”等经典应用,理解其“后进先出”和“先进先出”的特性。你将亲手实现数组队列和更高效的循环队列,并挑战“用栈实现队列”等经典面试题。
动态数据结构——链表:深入学习最基础的动态数据结构——链表。掌握链表的增删改查、虚拟头结点的技巧,并用链表实现栈和队列。课程还将通过链表问题,带你深入理解递归的宏观语义与微观执行机制,并攻克“翻转链表”等经典难题。
2. 核心算法:排序与查找
基础排序算法:系统学习选择排序、插入排序、冒泡排序和希尔排序。你将不仅实现它们,更会通过对比分析,理解插入排序在近乎有序数组中的优势,以及希尔排序作为首个突破O(n²)的排序算法的设计思想。
高级排序算法:深入剖析归并排序和快速排序这两种O(n log n)级别的排序算法。
归并排序:学习其“分而治之”的思想,实现自顶向下和自底向上两种版本,并探讨如何利用它解决“数组逆序对”问题。
快速排序:从基础的双路快排,到处理大量重复元素的三路快排,再到随机化优化,你将全面掌握这一应用最广泛的排序算法,并用它解决经典的“Select K”问题。
查找算法:
二分查找:彻底掌握二分查找及其各种变种(如lower, upper, floor, ceil),学习编写无Bug的二分查找代码,并总结通用模板,解决LeetCode上的相关难题。
堆与优先队列:学习最大堆、最小堆的原理与实现,掌握Heapify和Sift Down等核心操作。理解堆排序的原理,并学习如何使用优先队列高效解决“Top K”问题。
3. 高级数据结构:树、哈希表与字符串
树形结构:
二分搜索树 (BST):学习BST的增删查改和前、中、后序、层序遍历。基于BST实现集合(Set)和映射(Map),并与链表实现进行复杂度对比。
平衡树:深入理解树退化的问题,学习AVL树的旋转操作(LL, RR, LR, RL)以维持平衡。并通过2-3树的角度,透彻理解红黑树的五大性质和插入、删除时的平衡调整过程。
哈希表:系统学习哈希表的设计原理,包括哈希函数的设计、哈希冲突的处理(链地址法)、以及动态扩容策略。你将亲手实现一个属于自己的哈希表,并理解Java中hashCode方法的作用。
字符串与高级结构:
Trie字典树:学习专为字符串设计的Trie树,掌握其前缀查询和模式匹配的强大能力。
线段树与并查集:学习用于高效处理区间查询和更新的线段树,以及用于处理不相交集合合并与查询的并查集(包含路径压缩和按秩合并优化)。
字符串匹配:从暴力匹配法到Rabin-Karp滚动哈希算法,学习如何高效解决字符串匹配、最长快乐前缀等问题。
非比较排序:学习计数排序这一线性时间复杂度的排序算法,深入理解其“稳定性”的重要性质。
课程亮点
体系化构建,从零到一:课程从最基础的概念讲起,循序渐进,逻辑清晰,帮助你构建一个完整、无死角的算法与数据结构知识网络。
深入原理,不止于实现:不仅教你“怎么写”,更强调“为什么这么写”。通过复杂度分析、性能对比和底层原理剖析,让你真正理解每个算法和数据结构的设计精髓。
实战驱动,学以致用:课程紧密结合LeetCode等平台的经典题目,将理论知识应用于实战,让你在解决问题的过程中巩固所学,提升编码能力。
代码为王,亲手实现:课程鼓励并引导你亲手实现每一个数据结构和算法,从动态数组到红黑树,从快速排序到哈希表,在编码实践中深化理解。

课程目录:
算法与数据结构体系课
| 说明.png
| 资料.zip
|
+—第10周 冒泡排序,希尔排序和排序算法大总结
| 1-1 冒泡排序的基本思想.mp4
| 1-2 实现冒泡排序法.mp4
| 1-3 冒泡排序的优化.mp4
| 1-4 冒泡排序还能优化.mp4
| 1-5 作业:换个方式实现冒泡排序.mp4
| 1-6 换个方式实现冒泡排序.pdf
| 1-7 冒泡排序的特点.mp4
| 2-1 插入排序法和冒泡排序法的启迪.mp4
| 2-2 希尔排序法的基本原理.mp4
| 2-3 实现希尔排序法.mp4
| 2-4 希尔排序法的性能.mp4
| 2-5 换个方式实现希尔排序法.mp4
| 2-6 步长序列.mp4
| 2-7 希尔排序和超参数.mp4
| 3-1 基于比较排序算法大总结.mp4
| 3-2 什么是排序算法的稳定性.mp4
| 3-3 基础排序算法的稳定性.mp4
| 3-4 高级排序算法的稳定性.mp4
|
+—第11周 线段树,Trie 和并查集
| 1-1 什么是线段树.mp4
| 1-2 线段树基础表示.mp4
| 1-3 创建线段树.mp4
| 1-4 线段树中的区间查询.mp4
| 1-5 Leetcode上线段树相关的问题.mp4
| 1-6 线段树中的更新操作.mp4
| 1-7 更多线段树相关的话题.mp4
| 2-1 什么是Trie字典树.mp4
| 2-2 Trie字典树基础.mp4
| 2-3 Trie字典树的查询.mp4
| 2-4 Trie字典树的前缀查询.mp4
| 2-5 Trie字典树和简单的模式匹配.mp4
| 2-6 Trie字典树和字符串映射.mp4
| 2-7 更多和Trie字典树相关的话题.mp4
| 2-8 基于哈希表或者数组的 Trie.pdf
| 3-1 什么是并查集.mp4
| 3-2 Quick Find.mp4
| 3-3 Quick Union.mp4
| 3-4 基于size的优化.mp4
| 3-5 基于rank的优化.mp4
| 3-6 路径压缩.mp4
| 3-7 更多和并查集相关的话题.mp4
|
+—第12周 AVL 树和红黑树
| 1-1 平衡树和AVL.mp4
| 1-2 计算节点的高度和平衡因子.mp4
| 1-3 检查二分搜索树性质和平衡性.mp4
| 1-4 旋转操作的基本原理.mp4
| 1-5 左旋转和右旋转的实现.mp4
| 1-6 LR 和 RL.mp4
| 1-7 从AVL树中删除元素.mp4
| 1-8 基于AVL树的集合和映射.mp4
| 2-1 红黑树与2-3树.mp4
| 2-2 2-3树的绝对平衡性.mp4
| 2-3 红黑树与2-3树的等价性.mp4
| 2-4 红黑树的基本性质和复杂度分析.mp4
| 2-5 保持根节点为黑色和左旋转.mp4
| 2-6 颜色翻转和右旋转.mp4
| 2-7 红黑树中添加新元素.mp4
| 2-8 红黑树的性能测试.mp4
| 2-9 更多红黑树相关的话题.mp4
|
+—第13周 哈希表和 SQRT 分解
| 1-1 哈希表基础.mp4
| 1-2 哈希函数.mp4
| 1-3 Java中的hashCode方法.mp4
| 1-4 链地址法 Seperate Chaining.mp4
| 1-5 实现属于我们自己的哈希表.mp4
| 1-6 哈希表的动态空间处理与复杂度分析.mp4
| 1-7 哈希表更复杂的动态空间处理方法.mp4
| 1-8 更多哈希冲突的处理方法.mp4
|
+—第14周 非比较排序
| 1-1 什么是计数排序 (2).mp4
| 1-2 使用计数排序解决力扣 75 号问题 (2).mp4
| 1-3 更一般的计数排序算法 (2).mp4
| 1-4 实现更一般的计数排序算法 (2).mp4
| 1-5 计数排序算法的重要性质:稳定性 (2).mp4
| 1-6 验证计数排序算法的稳定性 (2).mp4
|
+—第15周-模式匹配
| 1-1 字符串匹配问题.mkv
| 1-2 实现字符串暴力匹配.mkv
| 1-3 字符串暴力匹配的性能并不差.mkv
| 1-4 哈希是一种思想——字符串哈希解决匹配问题.mkv
| 1-5 求解段式回文问题.mkv
| 1-6 使用哈希思想求解段式回文.mkv
| 2-1 快乐前缀问题.mp4
| 2-2 使用哈希法求解快乐前缀问题.mp4
| 2-3 重复的 DNA 问题.mp4
| 2-4 滚动哈希法.mp4
| 2-5 使用滚动哈希求解重复 DNA 问题.mp4
| 2-6 从滚动哈希到 Rabin-Karp 算法.mp4
| 2-7 实现 Rabin-Karp 算法.mp4
| 2-8 Rabin-Karp 算法的性能分析.mp4
|
+—第1周 线性查找法
| +—第1章 欢迎大家来到算法与数据结构的世界
| | 1-1 欢迎大家来到算法与数据结构的世界.mp4
| | 1-2 学习算法和数据结构到底有没有用?.mp4
| | 1-3 更多课程学习注意事项.mp4
| | 1-4 课程编程环境的搭建.mp4
| |
| \—第2章 线性查找法
| 2-1 什么是算法.mp4
| 2-10 本章小结.mp4
| 2-2 最简单的算法:线性查找法.mp4
| 2-3 实现线性查找法.mp4
| 2-4 使用泛型.mp4
| 2-5 使用自定义类测试我们的算法.mp4
| 2-6 循环不变量.mp4
| 2-7 简单的复杂度分析.mp4
| 2-8 常见的时间复杂度.mp4
| 2-9 测试算法性能.mp4
|
+—第2周 排序基础
| +—第1章 选择排序法
| | 1-1 最简单的排序算法:选择排序法.mp4
| | 1-2 实现选择排序法.mp4
| | 1-3 使用带约束的泛型.mp4
| | 1-4 使用 Comparable 接口.mp4
| | 1-5 选择排序法的复杂度分析.mp4
| | 1-6 一个作业:换个角度实现选择排序法.mp4
| | 1-7 图文节.pdf
| |
| \—第2章 插入排序法
| 2-1 插入排序法 [无代码].mp4
| 2-2 实现插入排序法-1.mp4
| 2-2 实现插入排序法-2.mp4
| 2-3 插入排序法的一个小优化.mp4
| 2-4 插入排序法的特性.mp4
| 2-5 一个作业:换个角度实现插入排序法.mp4
| 2-6 图文节.pdf
| 2-7 本章小结.mp4
|
+—第3周 数据结构基础:动态数组,栈和队列-
| +—第1章 数据结构基础:不要小瞧数组
| | 1-1 为什么要学习数据结构.mp4
| | 1-10 均摊复杂度和防止复杂度的震荡.mp4
| | 1-2 使用 Java 中的数组.mp4
| | 1-3 二次封装属于我们自己的数组.mp4
| | 1-4 向数组中添加元素.mp4
| | 1-5 数组中查询元素和修改元素.mp4
| | 1-6 数组中的包含,搜索和删除.mp4
| | 1-7 泛型类.mp4
| | 1-8 动态数组.mp4
| | 1-9 简单的复杂度分析.mp4
| |
| +—第2章 栈和队列
| | 2-1 栈和栈的应用:撤销操作和系统栈.mp4
| | 2-10 图文节.pdf
| | 2-11 图文节.pdf
| | 2-12 作业:双端队列.mp4
| | 2-13 图文节.pdf
| | 2-2 栈的基本实现.mp4
| | 2-3 栈的另一个应用:括号匹配.mp4
| | 2-4 关于 Leetcode 的更多说明.mp4
| | 2-5 数组队列.mp4
| | 2-6 循环队列.mp4
| | 2-7 循环队列的实现.mp4
| | 2-8 数组队列和循环队列的比较.mp4
| | 2-9 作业:换个方式实现队列?.mp4
| |
| \—第3章 习题补充:栈和队列其他习题
| 3-1 作业:用栈实现队列和用队列实现栈.mp4
| 3-2 图文节.pdf
| 3-3 图文节.pdf
| 3-4 图文节.pdf
|
+—第4周 动态数据结构基础:链表
| +—第1章 最基础的动态数据结构:链表
| | 1-1 什么是链表.mp4
| | 1-2 在链表中添加元素.mp4
| | 1-3 使用链表的虚拟头结点.mp4
| | 1-4 链表的遍历,查询和修改.mp4
| | 1-5 从链表中删除元素.mp4
| | 1-6 使用链表实现栈.mp4
| | 1-7 带有尾指针的链表:使用链表实现队列.mp4
| | 1-8 图文节.pdf
| |
| +—第2章 透过链表看递归
| | 2-1 Leetcode中和链表相关的问题.mp4
| | 2-10 更多和链表相关的话题.mp4
| | 2-2 测试自己的Leetcode链表代码.mp4
| | 2-3 递归基础与递归的宏观语意.mp4
| | 2-4 链表与递归.mp4
| | 2-5 递归运行的机制:递归的微观解读.mp4
| | 2-6 递归算法的调试.mp4
| | 2-7 作业:链表的递归实现.mp4
| | 2-9 链表添加元素递归方法的常见问题解析.mp4
| |
| \—第3章 补充 链表相关习题
| 3-1 链表最经典的问题:翻转链表.mp4
| 3-2 翻转链表的非递归实现.mp4
| 3-3 翻转链表的递归实现.mp4
| 3-4 更多链表问题推荐.mp4
|
+—第5周 归并排序法
| 1-1 归并排序法的原理.mp4
| 1-2 归并过程.mp4
| 1-3 实现归并过程.mp4
| 1-4 实现归并排序法.mp4
| 1-5 归并排序法的微观解读.mp4
| 1-6 作业:在程序上调试跟踪归并排序法.mp4
| 1-7 在程序上调试跟踪归并排序法.pdf
| 1-8 归并排序法的复杂度分析.mp4
| 2-1 在有序数组,让归并排序法成为 O(n) 算法.mp4
| 2-10 归并排序法小结.mp4
| 2-2 使用插入排序法优化归并排序法.mp4
| 2-3 归并排序法的内存操作优化.mp4
| 2-4 自底向上的归并排序.mp4
| 2-5 实现自底向上的归并排序.mp4
| 2-6 作业:使用插入排序法优化自底向上的归并排序.mp4
| 2-7 使用插入排序法,优化自底向上的归并排序.pdf
| 2-8 数组的逆序对数量问题.mp4
| 2-9 快速求解数组的逆序对数量.mp4
|
+—第6周 快速排序法
| 1-1 快速排序法的原理.mp4
| 1-10 作业解析:用算法生成一个特殊的测试用例.pdf
| 1-2 Partition.mp4
| 1-3 第一版快速排序法.mp4
| 1-4 作业:深入理解快速排序的递归过程.mp4
| 1-5 作业解析:使用插入排序法优化快速排序.pdf
| 1-6 第一版快速排序法的问题.mp4
| 1-7 为快速排序添加随机化.mp4
| 1-8 两个作业:深入玩转快速排序.mp4
| 1-9 作业解析:只创建一个 Random 类.pdf
| 2-1 快速排序算法还有问题.mp4
| 2-10 和 Select K 相关的三个问题.pdf
| 2-11 快速排序小结.mp4
| 2-2 双路快速排序法.mp4
| 2-3 实现双路快速排序法.mp4
| 2-4 快速排序算法的复杂度分析.mp4
| 2-5 三路快速排序法.mp4
| 2-6 实现三路快速排序法.mp4
| 2-7 作业:一道面试问题,Sort Colors.mp4
| 2-8 Leetcode 75:Sort Colors.pdf
| 2-9 作业:Select K 问题.mp4
|
+—第7周 二分查找法
| 1-1 二分查找法.mp4
| 1-2 二分查找法的递归写法.mp4
| 1-3 二分查找法的非递归写法.mp4
| 1-4 作业:Select K 的非递归写法.mp4
| 1-5 非递归实现 Select K 算法.pdf
| 1-6 换个定义实现二分查找法.mp4
| 1-7 作业:换个定义实现算法.mp4
| 1-8 改变定义重写 Select K 算法.pdf
| 1-9 改变定义重写归并排序算法.pdf
| 2-1 二分查找法的变种:upper.mp4
| 2-10 二分查找法总结:二分查找模板.mp4
| 2-11 作业解析:换个方式实现二分查找.pdf
| 2-2 实现 upper.mp4
| 2-3 二分查找法的变种:ceil.mp4
| 2-4 作业:二分查找法的变种:lower_ceil.mp4
| 2-6 二分查找法的变种:lower.mp4
| 2-7 实现 lower 和二分查找的大坑.mp4
| 2-8 作业:二分查找法的变种:lower_floor 和 upper_floor.mp4
| 2-9 作业解析:实现 lower_floor 和 upper_floor.pdf
| 3-1 Leetcode 875.mp4
| 3-2 编程实现 Leetcode 875.mp4
| 3-3 作业:Leetcode 1011.mp4
| 3-4 解决 Leetcode 1011.pdf
| 3-5 更多二分查找相关问题.mp4
|
+—第8周 二分搜索树
| 1-1 为什么要研究树结构.mp4
| 1-10 深入理解二分搜索树的前中后序遍历.mp4
| 1-11 二分搜索树前序遍历的非递归实现.mp4
| 1-12 二分搜索树的层序遍历.mp4
| 1-13 删除二分搜索树的最大元素和最小元素.mp4
| 1-14 删除二分搜索树的任意元素.mp4
| 1-15 更多二分搜索树相关话题.mp4
| 1-2 二分搜索树基础.mp4
| 1-3 向二分搜索树中添加元素.mp4
| 1-4 改进添加操作:深入理解递归终止条件.mp4
| 1-5 作业:和二分搜索树的添加相关的两个问题.mp4
| 1-7 二分搜索树的查询操作.mp4
| 1-8 二分搜索树的前序遍历.mp4
| 1-9 二分搜索树的中序遍历和后序遍历.mp4
| 2-1 集合基础和基于二分搜索树的集合实现.mp4
| 2-2 基于链表的集合实现.mp4
| 2-3 集合类的复杂度分析.mp4
| 2-4 Leetcode中的集合问题和更多集合相关问题.mp4
| 2-5 映射基础.mp4
| 2-6 基于链表的映射实现.mp4
| 2-7 基于二分搜索树的映射实现.mp4
| 2-8 映射的复杂度分析和更多映射相关问题.mp4
|
\—第9周 堆,优先队列和堆排序
1-1 什么是优先队列.mp4
1-10 实现最小堆.pdf
1-2 堆的基础表示.mp4
1-3 向堆中添加元素和Sift Up.mp4
1-4 从堆中取出元素和Sift Down.mp4
1-5 最直观的堆排序.mp4
1-6 Heapify 和 Replace.mp4
1-7 实现 Heapify.mp4
1-8 优化的堆排序.mp4
1-9 作业:最小堆.mp4
2-1 基于堆的优先队列.mp4
2-2 Top K 问题.mp4
2-3 作业:使用优先队列解决 Select K 问题.mp4
2-4 使用优先队列的思想解决 Leetcode 215.pdf
2-5 使用 Java 中的 PriorityQueue.mp4
2-6 使用快排思想和优先队列解决 Top K 问题的比较.mp4
2-7 和堆相关的更多话题和广义队列.mp4

下载地址:

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

算法与数据结构体系课-IT技术资源教程免费分享平台
算法与数据结构体系课
此内容为付费阅读,请付费后查看
¥29.9
限时特惠
¥99
立即购买
您当前未登录!建议登陆后购买,可保存购买订单
付费阅读
© 版权声明
THE END
喜欢就支持一下吧
点赞46 分享