学习笔记之《玩转算法系列--数据结构精讲》
慕课网bobo老师的课程学习过程中所做笔记,方便自己及其他有需要的同学进行学习,及复习巩固。
peihenglee
我该如何度过这一生?
展开
-
第15章 结尾语(流下感动的泪水)
恭喜本 vegetable chicken 完成了这个课程的第一遍学习!线性结构 - - - > 动态数组、普通队列、栈、链表、哈希表树形结构 - - - > 二分搜索树、AVL树、红黑树、堆、线段树、Trie 并查集图结构 - - - > 邻接表、邻接矩阵抽象数据结构:线性表:动态数组、链表栈、队列集合、映射(有序集合、有序映射;无序集合、无序映射)更多数据结构:双端队列、随机队列、最大最小队列双向链表、循环链表跳跃表、后缀数组K-D树、Splay树、原创 2020-06-24 15:44:40 · 258 阅读 · 2 评论 -
第14章 哈希表大佬的压轴出场
第十四章 哈希表14-1 哈希表基础14-2 哈希函数的设计14-3 Java 中的 hashCode 方法14-4 链地址法 Separate Chaining14-5 实现属于我们自己的哈希表14-6 哈希表的动态空间处理与复杂度分析14-7 哈希表更复杂的动态空间处理方法14-8 更多哈希冲突的处理方法14-1 哈希表基础14-2 哈希函数的设计14-3 Java 中的 hashCode 方法14-4 链地址法 Separate Chaining14-5 实现属于我们自己的原创 2020-06-24 15:06:58 · 304 阅读 · 0 评论 -
第13章 红黑树的黑暗力量
第十三章 红黑树13-1 红黑树与2-3树13-2 2-3树的绝对平衡性13-3 红黑树与2-3树的等价性13-4 红黑树的基本性质和复杂度分析13-5 保持根节点为黑色和左旋转13-6 颜色翻转和右旋转13-7 红黑树中添加新元素13-8 红黑树的性能测试13-9 更多和红黑树相关的话题13-1 红黑树与2-3树13-2 2-3树的绝对平衡性13-3 红黑树与2-3树的等价性13-4 红黑树的基本性质和复杂度分析13-5 保持根节点为黑色和左旋转13-6 颜色翻转和右旋转原创 2020-06-23 15:36:55 · 367 阅读 · 0 评论 -
第12章 AVL平衡树是怎么平衡的?
第十二章 AVL平衡树12-1 平衡树和AVL12-2 计算节点高度和平衡因子12-3 检查二分搜索树性质和平衡性12-4 旋转操作的基本原理12-5 左旋转和右旋转的实现12-6 LR和RL12-7 从AVL树中删除元素12-8 基于AVL树的集合和映射12-1 平衡树和AVLAVL是两个发明人名字的缩写:G. M. Adelson-Velsky and E. M. Landis1962年论文首次提出,是最早的自平衡二分搜索树结构。什么是平衡二叉树?12-2 计算节点高度和原创 2020-06-22 14:53:03 · 398 阅读 · 0 评论 -
第11章 并查集到底是哪块小饼干
第十一章 并查集11-1 什么是并查集11-2 Quick Find11-3 Quick Union11-4 基于size的优化11-5 基于rank的优化11-6 路径压缩11-7 更多和并查集相关的话题11-1 什么是并查集 Union Find并查集是由孩子指向父亲的一种很不一样的树形结构,可以用来解决连接问题与路径问题。比如:给出迷宫中任意两点,判断两点之间是否可以通过一个路径连接起来解决路径问题便一定能解决连接问题,但由于路径问题考虑了更多与连接问题无关的操作,使得用处原创 2020-06-19 21:15:51 · 139 阅读 · 0 评论 -
第10章 Trie字典树(Leetcode原题)
第十章 Trie字典树10-1 什么是Trie字典树10-2 Trie字典树基础10-3 Trie字典树的查询10-4 Trie字典树的前缀查询10-5 Trie字典树和简单的模式匹配10-6 Trie字典树和字符串映射10-7 更多和Trie字典树相关的话题10-1 什么是Trie字典树Trie字典树(前缀树):之前介绍的二分搜索树,堆,线段树都是二叉树,而字典树是多叉树。例如通讯录,字典。Trie字典树将整个字符串以字母为单位一个一个拆开,从根节点开始一直到叶子节点去遍历,每遍历原创 2020-06-19 15:38:09 · 278 阅读 · 0 评论 -
第9章 线段树/区间树(Leetcode原题)
第九章 线段树(区间树)9-1 什么是线段树9-2 线段树基础表示9-3 创建线段树9-4 线段树中的区间查询9-5 Leetcode上线段树相关的问题9-6 线段树中的更新操作9-7 更多线段树相关的话题9-1 什么是线段树为什么要使用线段树Segment Tree: 对于有一类问题,我们关心的是线段(或者区间)最经典的线段树问题:区间染色有一面墙,长度为n,每次选择一段墙进行染色,那么经过m次操作后,我们可以看见多少种颜色?m次操作后,我们可以在[i, j]区间内看见多少种颜色原创 2020-06-19 10:53:01 · 1250 阅读 · 0 评论 -
第8章 优先队列和堆(Leetcode原题)
第八章 优先队列和堆8-1 什么是优先队列8-2 堆的基础表示8-3 向堆中添加元素和Sift Up8-4 从堆中取出元素和Sift Down8-5 Heapify 和Replace8-6 基于堆的优先队列8-7 Leetcode上优先队列相关问题8-8 Java中的PriorityQueue8-9 和堆相关的更多话题和广义队列8-1 什么是优先队列我们在之前的两章向大家详细介绍了二分搜索树这种数据结构,同时我们使用二分搜索树实现了集合和映射这两个相对来讲更加高层的数据结构。树这种原创 2020-06-15 20:51:07 · 331 阅读 · 0 评论 -
第7章:集合和映射(Leetcode原题)
第七章 集合和映射7-1 集合基础和基于二分搜索树的集合实现7-2 基于链表的集合实现7-3 集合类的复杂度分析7-4 Leetcode中的集合问题和更多集合相关问题7-5 映射基础7-6 基于链表的映射实现7-7 基于二分搜索树的映射实现7-8 映射的复杂福分析和更多映射相关问题7-9 Leetcode上更多集合和映射的问题7-1 集合基础和基于二分搜索树的集合实现集合:承载元素的容器,每个元素只能存在一次,它可以非常快速地帮助我们实现去重这个操作回忆我们上一小节实现的二分搜索树原创 2020-06-13 14:42:22 · 286 阅读 · 0 评论 -
第6章:关于二分搜索树的那些事(2)
第六章 二分搜索树6-8 深入理解二分搜索树的前中后序遍历6-9 二分搜索树前序遍历的非递归实现6-10 二分搜索树的层序遍历6-11 删除二分搜索树的最大元素和最小元素6-12 删除二分搜索树的任意元素6-13 更多二分搜索树相关话题6-8 深入理解二分搜索树的前中后序遍历举个栗子:二分搜索树的遍历在访问左子树之前,会访问一下节点然后才能遍历左子树;遍历完左子树之后会回到节点,之后才会去遍历右子树,遍历完右子树之后又会回到节点。因此对每一个节点,使用递归遍历的方式,会访问节点三次。原创 2020-06-12 16:08:04 · 184 阅读 · 0 评论 -
第6章:关于二分搜索树的那些事(1)
第六章 二分搜索树6-1 为什么要研究树结构6-2 二分搜索树基础6-3 向二分搜索树中添加元素6-4 改进添加操作:深入理解递归终止条件6-5 二分搜索树的查询操作6-6 二分搜索树的前序遍历6-7 二分搜索树的中序遍历和后序遍历6-1 为什么要研究树结构树结构本身是一种天然的组织结构,如:文件目录结构,图书馆图书索引,公司的组织架构etc.树结构存储数据的优点:高效树结构主要分为以下几类:二分搜索树(Binary Search Tree);平衡二叉树;AVL;红黑树;堆;并查原创 2020-06-11 16:11:05 · 204 阅读 · 0 评论 -
第5章:链表和递归密不可分的关系(Leetcode原题)
第五章 链表和递归5-1 Leetcode中和链表相关的问题5-2 测试自己的Leetcode链表代码5-3 递归基础与递归的宏观语意5-4 链表的天然递归结构性质5-5 递归运行的机制:递归的微观解读5-6 递归算法的调试5-7 更多和链表相关的问题5-1 Leetcode中和链表相关的问题https://leetcode-cn.com/problems/remove-linked-list-elements/解法一:class Solution { public Lis原创 2020-06-10 16:30:02 · 554 阅读 · 0 评论 -
第4章:关于链表的二三事
第四章 最基础的动态数据结构:链表4-1 什么是链表4-2 在链表中添加元素4-3 使用链表的虚拟头结点4-4 链表的遍历,查询和修改4-5 从链表中删除元素4-6 使用链表实现栈4-7 带有尾指针的链表:使用链表实现队列4-1 什么是链表链表是一种非常重要的线性数据结构。动态数组、栈、队列 => 这三者底层依托静态数组;靠resize解决固定容量问题链表 => 真正的动态数据结构为什么链表很重要?最简单的动态数据结构(还有二分搜索树、平衡二叉树等是更高级的动态数据原创 2020-06-02 10:54:09 · 454 阅读 · 0 评论 -
第3章 数组队列、循环队列及两者的比较
3-5 数组队列原创 2020-05-26 10:11:58 · 593 阅读 · 0 评论 -
第3章:栈+栈的应用+栈的基本实现(Leetcode原题)
3-1 栈和栈的应用:撤销操作和系统栈栈是一种线性结构,相比数组,栈对应的操作是数组的子集,而栈只能从一端添加元素(入栈),也只能从一端取出元素(出栈),这一端称为栈顶。栈是一种后进先出的线性数据结构 - Last In First Out (LIFO)栈的应用:(1)系统中常用的“撤销”操作:举个栗子:在word中依次输入:“小白兔”、“爱吃”、“白萝卜” -->小白兔爱吃白萝卜。我们知道这只小白兔爱吃胡萝卜,所以要撤销“白萝卜”(比如我们就按delete键,直接删除“白萝卜”),原创 2020-05-24 10:06:50 · 525 阅读 · 0 评论 -
第2章:数据结构之千万不要小瞧数组(2)
2-6 使用泛型原创 2020-05-23 12:33:54 · 275 阅读 · 0 评论 -
第2章:数据结构之千万不要小瞧数组(1)
2-1 使用Java中的数组数组概念:把数据码成一排进行存放数组中存在一个很重要的概念:索引由于数组中每一个元素都是一个一个挨着排队存放的,那么就可以给数组中的每个元素一个编号。n个元素的索引:第一个元素的索引是0,最后一个元素的索引是n-1。有了索引,就可以快速地直接访问第i个元素是谁(如图所示)Java中的数组如下:public class Main { public static void main(String[] args) { // write your code here原创 2020-05-22 10:41:01 · 320 阅读 · 0 评论 -
第1章:学习数据结构之长道漫漫第一步
1-1 欢迎学习《玩转数据结构》数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。数据结构可以分为三种结构:(1) 线性结构:数组;栈;队列;链表;哈希表…(2) 树结构:二叉树;二分搜索树;AVL;红黑树;Treap;Splay;堆;Trie;线段树;K-D树;并查集;哈夫曼树…(3)图结构:邻接矩阵;邻接表…我们需要根据应用的不同,灵活选择最合适的数据结构。举几个栗子:A。数据库:为了实现数据存储需要的知识:树结构 (AVL,红黑树,Treap,原创 2020-05-21 15:53:08 · 239 阅读 · 0 评论