历时三年,写的一本数据结构与算法pdf,开源了!
前言
大家好,我是bigsai,很早就在写博客,将文章整理成了一个pdf,并且开源到github上!
自己写东西断断续续也不少时间了,也写了不少东西(虽然是偏向小白),这个其实花费的时间还是比较多的,这次的话主要将数据结构与算法中一些文章整理出来,初步整理成一版pdf,先分享给大家。
因为在整理pdf方面没啥经验,目前还是md直接导出的pdf的,看了下有些部分代码太长太占页面,有些部分图片太长也很占地方,有部分文章还尝试不同风格显得不那么条理,有些地方页面突然分割也很影响视觉体验……
虽然有很多缺点和问题,这些地方后面也在想办法考虑一点点优化,也欢迎大伙提出宝贵的意见!当然这个仓库也是开源的,有兴趣一起维护的可以维护。
更新会同步到Github仓库中,也会告知大家。近期会将以前写的其他数据结构算法部分(未优化)优化更新上去。
github地址:https://github.com/javasmall/bigsai-algorithm
主要内容
理论基础搭建:
- 绪论基础知识:理解数据结构的相关概念,熟悉时间复杂度和空间复杂度。
- 写给小白硬核递归:通过解决经典问题,深入理解递归,掌握记忆化递归的妙用。
线性结构的掌握:
- 图解线性表:手写顺序表和链表,理解带头结点和不带头结点链表的实现区别。
- 图解双链表:手写双链表,考虑好节点直接联系,特别是考研重点。
栈与队列的熟练使用:
- 栈:掌握后进先出规则,实现上用顺序表和链表考虑区别。
- 队列:理解先进先出规则,实现上使用循环数组和链表分别实现。
更高级的线性结构:
跳表:了解跳表的增删改查原理和流程,拓宽对链表的认识。

约瑟夫环问题:通过链表法、List模拟、公式法逐步深入这个问题。
树的深入学习:
- 二叉树层序遍历:学会使用队列进行层序遍历,解决二叉树之字形遍历。
- 二叉树前中后遍历:熟练掌握非递归方式遍历,建立对树结构的全面理解。
- 二叉搜索(查找)树:学会查找方式和删除节点逻辑。
- 二叉平衡(AVL)树:了解平衡二叉树的旋转方式,以及不同平衡方式的应用。
其他重要数据结构:
- 哈夫曼树:理解哈夫曼树的weight计算方式和哈夫曼编码。
- 字典(Trie)树:手写字典树,熟悉其应用场景和优势。
- 优先队列:了解借助堆的运行原理。
- 并查集(不相交集合):手写并查集,理解路径压缩的优势。
问题解决方法的学习:
- 回溯算法:通过解经典问题如八皇后问题,深刻理解回溯思想。
- 分治算法:学会先分后合并,解决经典问题如二分搜索、快排、归并排序、最近点对等。
- 搜索算法:深度优先搜索、广度优先搜索,解决问题如蓝桥杯,提高解决实际问题的能力。
- 拓扑排序:理解图论算法,得到一个前后的顺序序列。
- Dijkstra算法:了解图论单源最短路径,队列+贪心实现。
- Floyd算法:了解图论多源最短路径,代码简短但需要深刻理解。
- 最小生成树算法:Prim和Kruskal,了解不同贪心策略的应用。
位运算与数论算法:
- 位运算:介绍几种位运算,解决大部分经典位运算问题。
- 求素数:掌握素数筛和欧拉筛的应用。
- 快速幂:数论算法,掌握非递归、递归写法,了解矩阵快速幂。
大数运算:
大数加减乘除:手写大数运算,了解大数除法的思想。

十大排序算法:
- 冒泡排序、快速排序:了解交换类排序的原理和应用。
- 插入排序、希尔排序:理解插入类排序的方法和优势。
- 归并排序:学会归并类排序的实现。
- 简单选择排序、堆排序:掌握选择类排序的原理。
- 桶排序、计数排序、基数排序:了解桶类排序的应用场景和实现。
- 双轴快排:优化快排的方法,深入理解排序算法的差异。
推荐资料
- 书籍:
- 《算法导论》:经典之作,系统全面地介绍了算法和数据结构。
- 《数据结构与算法分析》:作者Mark Allen Weiss,深入浅出地讲解数据结构与算法。
- 《剑指Offer》:针对面试算法题的详尽解析,适合入门和面试准备。
- 在线教程:
- LeetCode:刷题神器
github地址:https://github.com/javasmall/bigsai-algorithm
持续更新中,欢迎star支持 !
历时三年,写的一本数据结构与算法pdf,开源了!的更多相关文章
- JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)
1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...
- JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)
前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...
- JavaScript 数据结构与算法之美 - 栈内存与堆内存 、浅拷贝与深拷贝
前言 想写好前端,先练好内功. 栈内存与堆内存 .浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScri ...
- JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?
1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...
- 《数据结构与算法之美》 <05>链表(下):如何轻松写出正确的链表代码?
想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转.有序链表合并等,写的时候非常容易出错.从我上百场面试的经验来看,能把“链表反转”这几行代码写对的人不足 10%. 为什么链表代 ...
- 数据结构与算法 Big O 备忘录与现实
不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新. 算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...
- 用python语言讲解数据结构与算法
写在前面的话:关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem ...
随机推荐
- MAUI Blazor Android 输入框软键盘遮挡问题2.0
前言 关于MAUI Blazor Android 输入框软键盘遮挡问题,之前的文章已经有了答案,MAUI Blazor Android 输入框软键盘遮挡问题 但是这个方案一直存在一点小的瑕疵 在小窗模 ...
- Java Maven Settings配置参考
介绍 快速概览 settings.xml文件中的 settings 元素包含用于定义以各种方式配置Maven执行的值的元素,如pom.xml,但不应绑定到任何特定项目或分发给受众.这些值包括本地仓库位 ...
- #Powerbi 1分钟学会利用AI,为powerbi报表进行高端颜色设计
在BI报表的设计中,配色方案往往成为一大难题,一组切合主题.搭配合理的颜色设计往往能为我们的报表,加分不少. 今天,就介绍一个AI配色的网站,利用AI为pbi报表进行配色设计. 一:网站网址 http ...
- 概率dp_C++详解
引入 概率 DP 用于解决概率问题与期望问题,建议先对概率和期望的内容有一定了解.一般情况下,解决概率问题需要顺序循环,而解决期望问题使用逆序循环,如果定义的状态转移方程存在后效性问题,还需要用到 高 ...
- VS2015项目.net-framework-4.5.2升级或新建项目无法选择framework 4.6.2(解决办法)
VS2015里面没有.NET Framework 4.6.2 VS2015默认安装的目标框架最高是.NET Framework 4.6.1,但是我的项目里面某些NuGet软件包更新需要依赖.NET F ...
- Codeforces 1257D - Yet Another Monster Killing Problem
题意: 有\(n\)个怪物,每个怪物有攻击力\(a_i\)点:有\(m\)个英雄,每个英雄有攻击力\(p_i\)点,耐力\(s_{i}\)点. 怪物需要被依次杀死(按输入顺序). 每一天可以挑选一个英 ...
- 从软件工程师角度聊聊 Kubernetes
作为软件工程师,我们应该熟悉 K8s,尽管它有点像 DevOps,但它能让我们更好地了解幕后发生的事情,让我们与部署工作更密切相关,更有责任感.本文将从软件工程师的角度探讨 Kubernetes (K ...
- 使用HTML一键打包EXE工具打包KRPANO全景项目
HTML一键打包EXE工具(HTML封装EXE, HTML转EXE)能把任意HTML项目(网址)一键打包为单个EXE文件,可以脱离浏览器和服务器,直接双击即可运行. 打包工具群:429338543 最 ...
- 小札 Combinatorics 2
对于 Newton Expansion,式子本身的证明其实无甚可翻新的花样,但是题还是很有意思的.比如 codeforces - 1332E Height All the Same 这个. 首先给出几 ...
- JAVA中三种I/O框架——BIO、NIO、AIO
一.BIO(Blocking I/O) BIO,同步阻塞IO模型,应用程序发起系统调用后会一直等待数据的请求,直至内核从磁盘获取到数据并拷贝到用户空间: 在一般的场景中,多线程模型下的BIO是成本较低 ...