正版资源一、这份资料要解决的核心问题
很多学习者能够写出 Java 的基本语法,却不清楚数据应该如何组织、算法为什么这样设计,以及面对同一个问题时该选择哪一种实现方式。数据结构和算法真正困难的地方,不是记住名词,而是把抽象概念落实成可以运行、调试和修改的代码。这套资料以 Java 为实现语言,将数据结构、查找、排序、递归、字符串处理和图算法放在同一条实践线上,适合用来建立“问题分析—结构选择—算法实现—复杂度判断”的思考过程。
它解决的并不是某一道题的解法,而是帮助学习者看懂一类题目背后的通用模型。例如,顺序查找和二分查找的差别,不只是代码行数不同,还涉及数据是否有序、访问方式和时间复杂度;动态规划与贪心方法也不能只靠背诵结论,而要理解状态、转移条件和局部选择是否成立。即使学习目的包含软考中的基础知识复习,这些可运行的 Java 实现也能把书面概念转化为更容易验证的工程代码。
二、从 Java 源码理解数据结构与算法
资料中的代码大体按照数据结构和算法主题进行组织,适合使用 Java 开发环境逐个打开、运行和追踪。阅读时不要只关注某个方法能否得到正确结果,还要观察类如何保存数据、方法如何改变状态、调用者如何获得结果,以及异常输入和边界条件如何处理。对于较早形成的 Java 工程配置,如果当前使用的是新的开发工具,可以先重新导入源码或建立普通 Java 工程,再把重点放回类之间的关系和算法流程,不必被工程配置本身分散注意力。
算法部分覆盖了多种具有代表性的思路,包括非递归二分查找、分治、字符串匹配、动态规划、贪心,以及图上的最短路径和最小生成树等内容。像迪杰斯特拉、弗洛伊德、克鲁斯卡尔、普里姆这类算法,适合放在一起比较:它们处理的对象相近,但依赖的数据表示、选择策略和适用条件并不相同;字符串匹配则可以帮助理解朴素比较与模式信息复用之间的区别。通过这些对照,学习者能逐渐形成按约束选算法的习惯,而不是看到题目就机械套模板。
- 先确认输入规模、数据是否有序、图是否带权,以及问题是否允许重复计算。
- 再观察代码中的循环、递归、辅助数组和状态更新,判断时间与空间开销。
- 最后主动修改边界数据,验证空集合、单个元素、重复值和不可达情况。
三、适合什么基础,建议先看哪几块
这套资料更适合已经接触过 Java 基础语法的学习者。至少应能看懂变量、数组、循环、方法、类和对象,知道如何编译运行一个简单程序,并能使用断点或输出信息定位问题。不要求提前掌握复杂算法,但如果连数组下标、引用传递、递归调用和基本面向对象写法都不熟,直接进入图算法会比较吃力。基础较弱时,可以先用小程序复习数组遍历、方法拆分、类的封装和简单输入输出。
观看顺序不必完全依赖视频的排列顺序,更适合按认知难度重新分段。先看数据结构的基本表示和操作,再理解递归、复杂度以及查找排序;完成这些准备后,再进入字符串、分治、动态规划和贪心。图算法建议放在后面,因为它同时要求理解邻接关系、权值、集合或优先选择等概念。可以按下面的顺序建立主线:
- 第一阶段:熟悉线性数据组织、基本操作和 Java 类的实现方式。
- 第二阶段:掌握递归、查找、排序,并记录每种方法的适用条件与复杂度。
- 第三阶段:对照分治、动态规划和贪心,分析它们如何拆分问题和保存结果。
- 第四阶段:集中学习图的遍历、最短路径和最小生成树,比较不同算法的决策过程。
四、学完后可以独立完成什么
完成系统学习并进行足够改写后,可以独立实现一组常用的数据结构操作,例如增加、删除、查找、遍历和排序,并根据数据特点选择合适的存储方式。面对一个新的 Java 题目时,也能先拆出输入、状态、操作和输出,而不是立即复制一段代码。对于包含路径、连接关系或字符串匹配的问题,可以进一步判断它属于查找、图搜索、最短路径、集合合并、模式匹配或状态转移中的哪一类。
更重要的是,学习者可以把这些实现整理成可复用的小模块,再嵌入控制台程序或其他练习项目中。例如,将查找方法封装成独立工具,将图的表示与具体路径算法分开,将排序逻辑与数据输入分开,这样更换数据来源或算法时不必重写全部代码。遇到运行结果错误时,也能够沿着数据初始化、核心循环、状态更新和结果输出逐层排查,并用复杂度和边界条件解释为什么某种写法在大规模数据下会变慢。
五、视频、笔记和源码如何配合练习
视频适合用来建立概念和观察完整推导,源码适合用来验证细节,课件与笔记则适合在复习时快速定位定义、步骤和复杂度。不要连续播放大量内容后再一次性运行代码,建议每看完一个主题就暂停,把核心流程用自己的话写成几行伪代码,然后脱离原实现重新敲一遍。第一次运行关注结果,第二次关注变量变化,第三次主动改动输入和实现方式,这样才能判断自己是否真正理解。
练习时可以为每个算法保留一份简短记录,写清楚它解决什么问题、输入需要满足什么条件、核心状态是什么、最坏情况下的开销是多少。源码中的示例不要只当作最终答案,可以尝试改成空输入、单元素、重复元素、逆序数据和不可达图,再观察程序是否稳定。遇到看不懂的部分,先通过断点追踪调用顺序,再回到笔记补充概念;遇到能运行但不理解的部分,则重写变量名、拆分方法并补充注释。按照这种方式使用资料,它就不只是视频合集,而是一套可以反复对照、调试和扩展的 Java 数据结构与算法实践材料。
一共有195个视频教程,其他的资料资料课件笔记代码我就不列出了,太多了。
视频目录(224 节)
代码 / Algorithm
* .classpath
* .project
代码 / Algorithm / .settings
* org.eclipse.jdt.core.prefs
代码 / Algorithm / src / com / atguigu
* binarysearchnorecursion
* dac
* dijkstra
* dynamic
* floyd
* greedy
* horse
* kmp
* kruskal
* prim
代码 / DataStructures
* .classpath
* .project
代码 / DataStructures / .settings
* org.eclipse.jdt.core.prefs
代码 / DataStructures / src / com / atguigu
* avl
* binarysorttree
* graph
* hashtab
* huffmancode
* huffmantree
* linkedlist
* queue
* recursion
* reversepolishcal
* search
* sort
* sparsearray
* stack
* tree
课件
* 尚硅谷_韩顺平_Java数据结构和算法【最新版】.pptx
* 图解.xlsx
视频
* 001-尚硅谷-老韩图解Java数据结构和算法-几个经典的算法面试题(1) 【
* 002-尚硅谷-老韩图解Java数据结构和算法-几个经典的算法面试题(2) 【
* 003-尚硅谷-老韩图解Java数据结构和算法-内容介绍和授课方式 【
* 004-尚硅谷-老韩图解Java数据结构和算法-数据结构和算法的关系 【
* 005-尚硅谷-老韩图解Java数据结构和算法-编程中实际遇到的几个问题 【
* 006-尚硅谷-老韩图解Java数据结构和算法-线性结构和非线性结构 【
* 007-尚硅谷-老韩图解Java数据结构和算法-稀疏数组的应用场景 【
* 008-尚硅谷-老韩图解Java数据结构和算法-稀疏数组转换的思路分析 【
* 009-尚硅谷-老韩图解Java数据结构和算法-稀疏数组的代码实现 【
* 010-尚硅谷-老韩图解Java数据结构和算法-队列的应用场景和介绍 【
* 011-尚硅谷-老韩图解Java数据结构和算法-数组模拟队列的思路分析 【
* 012-尚硅谷-老韩图解Java数据结构和算法-数组模拟队列代码实现(1) 【
* 013-尚硅谷-老韩图解Java数据结构和算法-数组模拟队列代码实现(2) 【
* 014-尚硅谷-老韩图解Java数据结构和算法-数组模拟环形队列思路分析图 【
* 015-尚硅谷-老韩图解Java数据结构和算法-数组模拟环形队列实现 【
* 016-尚硅谷-老韩图解Java数据结构和算法-单链表介绍和内存布局 【
* 017-尚硅谷-老韩图解Java数据结构和算法-单链表创建和遍历的分析实现 【
* 018-尚硅谷-老韩图解Java数据结构和算法-单链表按顺序插入节点 【
* 019-尚硅谷-老韩图解Java数据结构和算法-单链表节点的修改 【
* 020-尚硅谷-老韩图解Java数据结构和算法-单链表节点的删除和小结 【
* 021-尚硅谷-老韩图解Java数据结构和算法-单链表新浪面试题 【
* 022-尚硅谷-老韩图解Java数据结构和算法-单链表腾讯面试题 【
* 023-尚硅谷-老韩图解Java数据结构和算法-单链表百度面试题 【
* 024-尚硅谷-老韩图解Java数据结构和算法-双向链表增删改查分析图解 【
* 025-尚硅谷-老韩图解Java数据结构和算法-双向链表增删改查代码实现 【
* 026-尚硅谷-老韩图解Java数据结构和算法-双向链表功能测试和小结 【
* 027-尚硅谷-老韩图解Java数据结构和算法-环形链表介绍和约瑟夫问题 【
* 028-尚硅谷-老韩图解Java数据结构和算法-约瑟夫问题分析图解和实现(1) 【
* 029-尚硅谷-老韩图解Java数据结构和算法-约瑟夫问题分析图解和实现(2) 【
* 030-尚硅谷-老韩图解Java数据结构和算法-栈的应用场景和介绍 【
* 031-尚硅谷-老韩图解Java数据结构和算法-栈的思路分析和代码实现 【
* 032-尚硅谷-老韩图解Java数据结构和算法-栈的功能测试和小结 【
* 033-尚硅谷-老韩图解Java数据结构和算法-栈实现综合计算器-思路分析(1) 【
* 034-尚硅谷-老韩图解Java数据结构和算法-栈实现综合计算器-代码实现(2) 【
* 035-尚硅谷-老韩图解Java数据结构和算法-栈实现综合计算器-代码实现(3) 【
* 036-尚硅谷-老韩图解Java数据结构和算法-前缀 中缀 后缀表达式规则 【
* 037-尚硅谷-老韩图解Java数据结构和算法-逆波兰计算器分析和实现(1) 【
* 038-尚硅谷-老韩图解Java数据结构和算法-逆波兰计算器分析和实现(2) 【
* 039-尚硅谷-老韩图解Java数据结构和算法-中缀转后缀表达式思路分析 【
* 040-尚硅谷-老韩图解Java数据结构和算法-中缀转后缀表达式代码实现(1) 【
* 041-尚硅谷-老韩图解Java数据结构和算法-中缀转后缀表达式代码实现(2) 【
* 042-尚硅谷-老韩图解Java数据结构和算法-完整版逆波兰计算器和小结 【
* 043-尚硅谷-老韩图解Java数据结构和算法-递归应用场景和调用机制 【
* 044-尚硅谷-老韩图解Java数据结构和算法-递归能解决的问题和规则 【
* 045-尚硅谷-老韩图解Java数据结构和算法-迷宫回溯问题分析和实现(1) 【
* 046-尚硅谷-老韩图解Java数据结构和算法-迷宫回溯问题分析和实现(2) 【
* 047-尚硅谷-老韩图解Java数据结构和算法-八皇后问题分析和实现(1) 【
* 048-尚硅谷-老韩图解Java数据结构和算法-八皇后问题分析和实现(2) 【
* 049-尚硅谷-老韩图解Java数据结构和算法-八皇后问题分析和实现(3) 【
* 050-尚硅谷-老韩图解Java数据结构和算法-排序算法介绍和分类 【
* 051-尚硅谷-老韩图解Java数据结构和算法-时间频度介绍和特点 【
* 052-尚硅谷-老韩图解Java数据结构和算法-时间复杂度计算和举例说明 【
* 053-尚硅谷-老韩图解Java数据结构和算法-平均和最坏时间复杂度介绍 【
* 054-尚硅谷-老韩图解Java数据结构和算法-冒泡排序算法思路图解 【
* 055-尚硅谷-老韩图解Java数据结构和算法-冒泡排序算法代码实现 【
* 056-尚硅谷-老韩图解Java数据结构和算法-冒泡排序算法优化和总结 【
* 057-尚硅谷-老韩图解Java数据结构和算法-选择排序算法思路图解 【
* 058-尚硅谷-老韩图解Java数据结构和算法-选择排序算法代码实现 【
* 059-尚硅谷-老韩图解Java数据结构和算法-选择排序算法速度测试 【
* 060-尚硅谷-老韩图解Java数据结构和算法-插入排序算法思路图解 【
* 061-尚硅谷-老韩图解Java数据结构和算法-插入排序算法代码实现 【
* 062-尚硅谷-老韩图解Java数据结构和算法-插入排序算法速度测试 【
* 063-尚硅谷-老韩图解Java数据结构和算法-希尔排序算法思路图解 【
* 064-尚硅谷-老韩图解Java数据结构和算法-希尔排序[交换式]算法实现 【
* 065-尚硅谷-老韩图解Java数据结构和算法-希尔排序[移位式]算法实现 【
* 066-尚硅谷-老韩图解Java数据结构和算法-快速排序算法思路图解 【
* 067-尚硅谷-老韩图解Java数据结构和算法-快速排序算法代码实现 【
* 068-尚硅谷-老韩图解Java数据结构和算法-快速排序算法速度测试 【
* 069-尚硅谷-老韩图解Java数据结构和算法-归并排序算法思路图解 【
* 070-尚硅谷-老韩图解Java数据结构和算法-归并排序算法代码实现 【
* 071-尚硅谷-老韩图解Java数据结构和算法-归并排序算法速度测试 【
* 072-尚硅谷-老韩图解Java数据结构和算法-基数排序算法思路图解 【
* 073-尚硅谷-老韩图解Java数据结构和算法-基数排序算法代码实现(1) 【
* 074-尚硅谷-老韩图解Java数据结构和算法-基数排序算法代码实现(2) 【
* 075-尚硅谷-老韩图解Java数据结构和算法-基数排序算法注意事项 【
* 076-尚硅谷-老韩图解Java数据结构和算法-排序算法时间复杂度比较 【
* 077-尚硅谷-老韩图解Java数据结构和算法-线性查找分析和实现 【
* 078-尚硅谷-老韩图解Java数据结构和算法-二分查找算法思路图解 【
* 079-尚硅谷-老韩图解Java数据结构和算法-二分查找算法代码实现 【
* 080-尚硅谷-老韩图解Java数据结构和算法-二分查找算法功能完善 【
* 081-尚硅谷-老韩图解Java数据结构和算法-插值查找算法工作原理 【
* 082-尚硅谷-老韩图解Java数据结构和算法-插值查找算法代码实现 【
* 083-尚硅谷-老韩图解Java数据结构和算法-斐波那契查找算法原理 【
* 084-尚硅谷-老韩图解Java数据结构和算法-斐波那契查找代码实现 【
* 085-尚硅谷-老韩图解Java数据结构和算法-斐波那契查找算法小结 【
* 086-尚硅谷-老韩图解Java数据结构和算法-哈希表的介绍和内存布局 【
* 087-尚硅谷-老韩图解Java数据结构和算法-哈希表实现思路图解 【
* 088-尚硅谷-老韩图解Java数据结构和算法-哈希表代码实现(1) 【
* 089-尚硅谷-老韩图解Java数据结构和算法-哈希表代码实现(2) 【
* 090-尚硅谷-老韩图解Java数据结构和算法-数组 链表 树存储方式分析 【
* 091-尚硅谷-老韩图解Java数据结构和算法-二叉树的概念和常用术语 【
* 092-尚硅谷-老韩图解Java数据结构和算法-前序中序后序遍历二叉树图解 【
* 093-尚硅谷-老韩图解Java数据结构和算法-前序中序后序遍历代码实现(1) 【
* 094-尚硅谷-老韩图解Java数据结构和算法-前序中序后序遍历代码实现(2) 【
* 095-尚硅谷-老韩图解Java数据结构和算法-前序中序后序查找思路图解 【
* 096-尚硅谷-老韩图解Java数据结构和算法-前序中序后序查找代码实现(1) 【
* 097-尚硅谷-老韩图解Java数据结构和算法-前序中序后序查找代码实现(2) 【
* 098-尚硅谷-老韩图解Java数据结构和算法-二叉树删除结点思路图解 【
* 099-尚硅谷-老韩图解Java数据结构和算法-二叉树删除结点代码实现 【
* 100-尚硅谷-老韩图解Java数据结构和算法-顺序存储二叉树思路图解 【
* 101-尚硅谷-老韩图解Java数据结构和算法-顺序存储二叉树代码实现 【
* 102-尚硅谷-老韩图解Java数据结构和算法-线索化二叉树的介绍 【
* 103-尚硅谷-老韩图解Java数据结构和算法-线索化二叉树思路图解 【
* 104-尚硅谷-老韩图解Java数据结构和算法-线索化二叉树代码实现1 【
* 105-尚硅谷-老韩图解Java数据结构和算法-线索化二叉树代码实现2 【
* 106-尚硅谷-老韩图解Java数据结构和算法-遍历线索化二叉树实现 【
* 107-尚硅谷-老韩图解Java数据结构和算法-大顶堆和小顶堆图解说明 【
* 108-尚硅谷-老韩图解Java数据结构和算法-堆排序的思路图解 【
* 109-尚硅谷-老韩图解Java数据结构和算法-堆排序的代码实现1 【
* 110-尚硅谷-老韩图解Java数据结构和算法-堆排序的代码实现2 【
* 111-尚硅谷-老韩图解Java数据结构和算法-堆排序的速度测试和小结 【
* 112-尚硅谷-老韩图解Java数据结构和算法-赫夫曼树的基本介绍 【
* 113-尚硅谷-老韩图解Java数据结构和算法-赫夫曼树创建步骤图解 【
* 114-尚硅谷-老韩图解Java数据结构和算法-赫夫曼树创建代码实现 【
* 115-尚硅谷-老韩图解Java数据结构和算法-变长编码的举例说明 【
* 116-尚硅谷-老韩图解Java数据结构和算法-赫夫曼编码的原理图解 【
* 117-尚硅谷-老韩图解Java数据结构和算法-数据压缩-创建赫夫曼树思路 【
* 118-尚硅谷-老韩图解Java数据结构和算法-数据压缩-创建赫夫曼树实现 【
* 119-尚硅谷-老韩图解Java数据结构和算法-数据压缩-生成赫夫曼编码表 【
* 120-尚硅谷-老韩图解Java数据结构和算法-数据压缩-赫夫曼编码字节数组 【
* 121-尚硅谷-老韩图解Java数据结构和算法-数据压缩-赫夫曼字节数组封装 【
* 122-尚硅谷-老韩图解Java数据结构和算法-数据解压-字节转二进制字符串 【
* 123-尚硅谷-老韩图解Java数据结构和算法-数据解压-赫夫曼解码 【
* 124-尚硅谷-老韩图解Java数据结构和算法-使用赫夫曼编码压缩文件 【
* 125-尚硅谷-老韩图解Java数据结构和算法-使用赫夫曼编码解压文件 【
* 126-尚硅谷-老韩图解Java数据结构和算法-赫夫曼编码注意事项 【
* 127-尚硅谷-老韩图解Java数据结构和算法-二叉排序树(BST)的介绍 【
* 128-尚硅谷-老韩图解Java数据结构和算法-二叉排序树(BST)创建和遍历 【
* 129-尚硅谷-老韩图解Java数据结构和算法-二叉排序树删除结点思路图解 【
* 130-尚硅谷-老韩图解Java数据结构和算法-二叉排序树删除叶子结点(1) 【
* 131-尚硅谷-老韩图解Java数据结构和算法-二叉排序树删除叶子结点(2) 【
* 132-尚硅谷-老韩图解Java数据结构和算法-BST删除有一颗子树的结点 【
* 133-尚硅谷-老韩图解Java数据结构和算法-BST删除有二颗子树的结点 【
* 134-尚硅谷-老韩图解Java数据结构和算法-BST删除结点的注意事项 【
* 135-尚硅谷-老韩图解Java数据结构和算法-平衡二叉树(AVL树)介绍 【
* 136-尚硅谷-老韩图解Java数据结构和算法-AVL树左旋转思路图解 【
* 137-尚硅谷-老韩图解Java数据结构和算法-AVL树高度求解 【
* 138-尚硅谷-老韩图解Java数据结构和算法-AVL树左旋转代码实现 【
* 139-尚硅谷-老韩图解Java数据结构和算法-AVL树右旋转图解和实现 【
* 140-尚硅谷-老韩图解Java数据结构和算法-AVL树双旋转图解和实现 【
* 141-尚硅谷-老韩图解Java数据结构和算法-平衡二叉树(AVL树)小结 【
* 142-尚硅谷-老韩图解Java数据结构和算法-多叉树原理图解 【
* 143-尚硅谷-老韩图解Java数据结构和算法-2-3树原理图解 【
* 144-尚硅谷-老韩图解Java数据结构和算法-B树和B加树原理图解 【
* 145-尚硅谷-老韩图解Java数据结构和算法-B星树和多路查找树小结 【
* 146-尚硅谷-老韩图解Java数据结构和算法-图的基本介绍和存储形式 【
* 147-尚硅谷-老韩图解Java数据结构和算法-图的创建图解和代码实现 【
* 148-尚硅谷-老韩图解Java数据结构和算法-图的深度优先(DFS)算法图解 【
* 149-尚硅谷-老韩图解Java数据结构和算法-图的深度优先(DFS)代码实现 【
* 150-尚硅谷-老韩图解Java数据结构和算法-图的广度优先(BFS)算法图解 【
* 151-尚硅谷-老韩图解Java数据结构和算法-图的广度优先(BFS)代码实现 【
* 152-尚硅谷-老韩图解Java数据结构和算法-DFS和BFS比较及图小结 【
* 153-尚硅谷-老韩图解Java数据结构和算法-二分查找非递归算法分析实现 【
* 154-尚硅谷-老韩图解Java数据结构和算法-分治算法的设计模式 【
* 155-尚硅谷-老韩图解Java数据结构和算法-分治算法解决汉诺塔问题 【
* 156-尚硅谷-老韩图解Java数据结构和算法-动态规划算法基本介绍 【
* 157-尚硅谷-老韩图解Java数据结构和算法-动态规划算法解决背包问题1 【
* 158-尚硅谷-老韩图解Java数据结构和算法-动态规划算法解决背包问题2 【
* 159-尚硅谷-老韩图解Java数据结构和算法-动态规划算法解决背包问题3 【
* 160-尚硅谷-老韩图解Java数据结构和算法-暴力匹配算法解决字串匹配问题 【
资料 / 清华大学本科 数据结构 (韩顺平整理)
* 第归与广义表.ppt
* 集合与搜索.ppt
* 链表.PPT
* 排序.ppt
* 授课老师介绍.ppt
* 树与森林.ppt
* 数组.ppt
* 索引与散列.ppt
* 图.ppt
* 绪论.ppt
* c++语言介绍.ppt
* ds1-3.zip
* ds1.zip
* ds2.zip
* ds3.zip
* ds4-6.zip
* ds4.zip
* DS7-10.zip
资料 / 压缩测试文件
* 1.pptx
* src.bmp
资料 / google算法编程大赛
* 磁盘问题
* 矩阵中查找单词路径数
* 扔石头
资料 / google算法编程大赛 / 公交车
* BusStops.class
* BusStops$Location.class
* BusStopTest.class
资料 / google算法编程大赛 / 画图
* DrawLines.class
* GoogleTest.class
* TestMain.class
资料 / google算法编程大赛 / 球和篮子
* BasketTest.class
* FillBaskets.class
配套笔记(9 份 PDF)
笔记
* 尚硅谷_韩顺平_图解Java数据结构和算法.pdf
资料 / 清华大学本科 数据结构 (韩顺平整理) / 4—6
* 第3章习题(链表).doc
* 第4章习题(栈和队列).doc
* 第5章习题(递归与广义表).doc
* 第6章习题(树与深林).doc
* 第7章习题(集合与搜索).doc
* 第8章习题(图).doc
* 第9章习题(排序).doc
* 第A章习题(索引与散列).doc




