![](https://img-blog.csdnimg.cn/20200417231621712.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
《恋上数据结构》
文章平均质量分 92
小码哥的恋上数据结构,见过最好的数据结构课程
萌宅鹿同学
目前在百度工作
展开
-
《恋上数据结构第1季》B 树
B树m阶B树的性质B树 vs 二叉搜索树搜索添加 – 上溢添加 – 上溢的解决(假设5阶)删除删除 – 叶子节点删除 – 非叶子节点B树是一种平衡的多路搜索树,多用于文件系统、数据库的实现;仔细观察B树,有什么眼前一亮的特点?1 个节点可以存储超过 2 个元素、可以拥有超过 2 个子节点拥有二叉搜索树的一些性质平衡,每个节点的所有子树高度一致比较矮m阶B树的性质数据库实现...原创 2020-05-08 15:20:37 · 1647 阅读 · 0 评论 -
《恋上数据结构第1季》二叉树代码实现
二叉树BinaryTree 基础遍历(先序、中序、后序、层次遍历)先序遍历: preorder()中序遍历: inorder()后序遍历: postorder()层次遍历: levelOrder()求二叉树的高度: height()递归实现迭代实现是否为完全二叉树: isComplaete()求二叉树的节点前驱节点: predecessor()后继节点: successor()BinaryTree...原创 2020-05-06 17:37:58 · 2342 阅读 · 1 评论 -
《恋上数据结构第1季》二叉树基础、真二叉树、满二叉树、完全二叉树、二叉树的遍历(重点)
二叉树树(Tree)的基本概念有序树、无序树、森林二叉树(Binary Tree)二叉树的性质真二叉树(Proper Binary Tree)满二叉树(Full Binary Tree)完全二叉树(Complete Binary Tree)面试题(完全二叉树)二叉树的遍历 + 练习题前序遍历(Preorder Traversal)中序遍历(Inorder Traversal)后序遍历(Postor...原创 2020-05-04 21:07:02 · 3117 阅读 · 0 评论 -
【恋上数据结构】串匹配算法(蛮力匹配、KMP【重点】、Boyer-Moore、Karp-Rabin、Sunday)
串(Sequence)串(前缀、后缀)串匹配算法蛮力(Brute Force)蛮力1 – 执行过程 + 实现蛮力1 – 优化蛮力2 – 执行过程 + 实现蛮力 – 性能分析KMP蛮力 vs KMPKMP – next表的使用KMP – 核心原理(构造next表)真前缀后缀的最大公共子串长度构造 next 表-1的精妙之处KMP – 主算法代码实现KMP – 为什么是“最大“公共子串长度?KMP –...原创 2020-04-27 21:50:54 · 1364 阅读 · 4 评论 -
【恋上数据结构】MySQL的索引底层为何使用 B+树?
B+树B+树介绍硬盘介绍盘片(platter)、盘面(side)、读写磁头(head)磁道(track)、扇区(sector)柱面(cylinder)磁盘块操作系统读取硬盘数据的过程磁盘完成IO操作的时间查看硬盘信息MySQL的索引底层为何使用B+树?B树 与 B*树数据结构与算法笔记:恋上数据结构笔记目录B+树介绍B+树 是 B树 的变体,常用于数据库和操作系统的文件系统中MySQ...原创 2020-04-27 11:38:18 · 816 阅读 · 0 评论 -
【恋上数据结构】跳表(Skip List)原理及实现
跳表(Skip List)引出跳表跳表介绍跳表原理及实现使用跳表优化链表跳表基础结构跳表的搜索跳表的添加、删除跳表的层数跳表的复杂度分析跳表 - 完整源码数据结构与算法笔记:恋上数据结构笔记目录引出跳表一个有序链表搜索、添加、删除的平均时间复杂度是多少?O(n)能否利用二分搜索优化有序链表,将搜索、添加、删除的平均时间复杂度降低至 O(logn)?链表没有像数组那样的高效随...原创 2020-04-26 23:55:47 · 772 阅读 · 0 评论 -
【恋上数据结构】布隆过滤器(Bloom Filter)原理及实现
布隆过滤器(Bloom Filter)引出布隆过滤器(判断元素是否存在)布隆过滤器介绍布隆过滤器的原理(二进制 + 哈希函数)布隆过滤器的误判率(公式)布隆过滤器的实现布隆过滤器的构造布隆过滤器 - 添加元素设置指定位置元素的二进制值为1布隆过滤器 - 判断元素是否存在查看指定位置的二进制的值布隆过滤器 - 完整代码引出布隆过滤器(判断元素是否存在)思考:如果要经常判断 1 个元素是否存在,要...原创 2020-04-26 16:11:38 · 1394 阅读 · 1 评论 -
【恋上数据结构】动态规划(找零钱、最大连续子序列和、最长上升子序列、最长公共子序列、最长公共子串、0-1背包)
动态规划原创 2020-04-22 23:55:55 · 1800 阅读 · 0 评论 -
【恋上数据结构】贪心(最优装载、零钱兑换、0-1背包)、分治(最大连续子序列和、大数乘法)
贪心、分治贪心(Greedy)问题1:最优装载(加勒比海盗)问题2:零钱兑换零钱兑换的另一个例子贪心注意点问题3:0-1背包0-1 背包 - 实例一些习题分治(Divide And Conquer)主定理(Master Theorem)问题1:最大连续子序列和解法1 – 暴力出奇迹暴力出奇迹 – 优化解法2 – 分治问题2:大数乘法贪心(Greedy)贪心策略,也称为贪婪策略每一步都采取当...原创 2020-04-18 16:41:30 · 967 阅读 · 0 评论 -
【恋上数据结构】回溯、剪枝(八皇后、n皇后)、LeetCode51.N皇后、LeetCode52.N皇后 II
回溯回溯(Back Tracking)提出八皇后问题(Eight Queens)初步思路一:暴力出奇迹初步思路二:根据题意减少暴力程度初步思路三:回溯法(回溯+剪枝)四皇后 - 回溯法图示八皇后 - 回溯法图示n皇后实现合法性检查从某一行开始摆放皇后摆放所有皇后打印n皇后 - 完整实现n皇后优化 - 合法性检查优化合法性检查优化 O(n) -> O(1)完整实现n皇后优化 - 位运算lee...原创 2020-04-17 00:10:44 · 1052 阅读 · 0 评论 -
【恋上数据结构】递归(函数调用过程、斐波那契数列、上楼梯、汉诺塔、递归转非递归、尾调用)
递归(Recursion)什么是递归?函数的调用过程(栈空间)函数的递归调用过程递归实例分析(1 + 2 + 3 + ... + 100 的和)递归的基本思想、使用套路斐波那契数列fib函数的调用过程fib优化1 — 记忆化fib优化2 — 去除递归调用fib优化3 — 滚动数组fib优化4 — 去除数组fib优化5 — 数学公式上楼梯(跳台阶)汉诺塔(Hanoi)1个盘子、2个盘子、3个盘子图...原创 2020-04-15 17:19:18 · 1710 阅读 · 0 评论 -
【恋上数据结构】图代码实现、最小生成树(Prim、Kruskal)、最短路径(Dijkstra、Bellman-Ford、Floyd)
图最小生成树(Minimum Spanning Tree)Prim算法切分定理Prim算法 – 执行过程Prim算法 – 代码实现Kruskal算法Kruskal算法 – 执行过程Kruskal算法 – 代码实现最短路径(Shortest Path)最短路径 – 无权图最短路径 – 负权边最短路径 – 负权环DijkstraBellman-FordFloyd最小生成树(Minimum Spann...原创 2020-04-13 00:51:32 · 1407 阅读 · 0 评论 -
【恋上数据结构】图代码实现、BFS、DFS、拓扑排序
图代码实现图的基础代码顶点Vertex边Edge添加边addEdge删除边removeEdge删除点removeVertex完整源码图的遍历广度优先搜索(Breadth First Search)思路与实现深度优先搜索(Depth First Search)递归实现非递归思路与实现AOV网(Activity On Vertex Network)拓扑排序(Topological Sort)拓扑排序 ...原创 2020-04-06 21:33:54 · 1265 阅读 · 0 评论 -
【恋上数据结构】图基础知识介绍
图数据结构回顾图(Graph)有向图(Directed Graph)出度、入度无向图(Undirected Graph)混合图(Mixed Graph)简单图、多重图无向完全图(Undirected Complete Graph)有向完全图(Directed Complete Graph)有权图(Weighted Graph)连通图(Connected Graph)连通分量(Connected C...原创 2020-03-30 23:26:19 · 941 阅读 · 0 评论 -
【并查集】Union Find
并查集引出并查集并查集(Union Find)如何存储数据?接口定义元素的初始化UnionFind.javaQuick Findunion 示例及实现find 实现Quick Find 完整代码Quick Unionunion 示例及实现find 实现Quick Union 完整实现Quick Union – 优化Quick Union – 基于size的优化Quick Union – 基于ran...原创 2020-03-29 17:55:28 · 1108 阅读 · 5 评论 -
【恋上数据结构】基数排序、桶排序、休眠排序
基数排序前言基数排序代码实现复杂度与稳定性基数排序-另一种思路代码实现复杂度与稳定性桶排序实现复杂度与稳定性"最强排序"-休眠排序经典的十大排序算法!前言请务必看一下这个:排序算法前置知识+代码环境准备。当上面的内容都准备好以后,那就开始基数排序吧!基数排序基数排序非常适合用于整数排序(尤其是非负整数),这里只介绍对非负整数进行基数排序。执行流程:依次对个位数、十位数、百位数、千位...原创 2020-03-29 00:50:03 · 754 阅读 · 0 评论 -
【恋上数据结构】计数排序
计数排序前言计数排序-简单实现实现步骤代码实现与缺点计数排序 – 改进改进-图解改进-实现复杂度与稳定性计数排序-对自定义对象进行排序经典的十大排序算法!前言请务必看一下这个:排序算法前置知识+代码环境准备。当上面的内容都准备好以后,那就开始计数排序吧!计数排序-简单实现之前学习的冒泡、选择、堆、插入、归并、快速、希尔排序都是基于比较的排序。计数排序、桶排序、基数排序,都不是基于比...原创 2020-03-28 15:34:57 · 531 阅读 · 1 评论 -
【恋上数据结构】希尔排序
希尔排序前言希尔排序思路实例图解列的划分思路步长序列计算代码希尔排序完整实现步长序列优化插入排序优化复杂度和稳定性经典的十大排序算法!前言请务必看一下这个:排序算法前置知识+代码环境准备。当上面的内容都准备好以后,那就开始希尔排序吧!希尔排序思路希尔排序把序列看作是一个矩阵,分成 ???? 列,逐列进行排序???? 从某个整数逐渐减为1当 ???? 为1时,整个序列将完全有序因此,希尔排序也...原创 2020-03-28 13:07:28 · 735 阅读 · 1 评论 -
【恋上数据结构】快速排序
快速排序前言快速排序轴点构造构造轴点-代码实现构造轴点-优化思考?与轴点相等的元素快速排序完整代码复杂度与稳定性经典的十大排序算法!前言请务必看一下这个:排序算法前置知识+代码环境准备。当上面的内容都准备好以后,那就开始快速排序吧!快速排序执行流程:① 从序列中选择一个轴点元素(pivot)假设每次选择 0 位置的元素为轴点元素② 利用 pivot 将序列分割成 2 个子序列...原创 2020-03-28 11:57:22 · 1153 阅读 · 1 评论 -
【恋上数据结构】归并排序 + LeetCode真题
归并排序归并排序序列分割-divide序列合并-merge合并到新序列原地合并-merge原地合并-merge-实现归并排序完整代码复杂度与稳定性常见的递推式与复杂度归并排序1945年由约翰·冯·诺伊曼(John von Neumann)首次提出。执行流程① 不断地将当前序列平均分割成 2 个子序列直到不能再分割(序列中只剩 1 个元素)② 不断地将 2 个子序列合并成一个有序序列...原创 2020-03-26 22:43:58 · 1363 阅读 · 0 评论 -
【恋上数据结构】插入排序及二分搜索优化
插入排序及二分搜索优化前言插入排序插入排序实现插入排序-逆序对插入排序 – 优化复杂度与稳定性二分搜索二分搜索-思路二分搜索-实现插入排序-二分搜索优化插入排序-二分搜索优化-思路插入排序-二分搜索优化-实例插入排序-二分搜索优化-实现复杂度与稳定性经典的十大排序算法!前言请务必看一下这个:排序算法前置知识+代码环境准备。当上面的内容都准备好以后,那就开始插入排序吧!插入排序插入排序...原创 2020-03-26 20:17:07 · 1119 阅读 · 0 评论 -
【恋上数据结构】复杂度知识以及LeetCode刷题指南
基础知识什么是算法?如何评判一个算法的好坏?大O表示法(Big O)对数阶的细节常见的复杂度多个数据规模的情况LeetCode刷题指南斐波那契数列复杂度分析斐波那契数列-递归斐波那契数列-循环fib函数的时间复杂度分析斐波那契的线性代数解法-特征方程算法的优化方向什么是算法?算法是用于解决特定问题的一系列的执行步骤。以下算法是为了解决两数相加的问题。// 计算a和b的和public st...原创 2020-03-26 13:50:07 · 3730 阅读 · 1 评论 -
【恋上数据结构】排序算法前置知识及代码环境准备
排序准备工作何为排序?何为稳定性?何为原地算法?时间复杂度的知识写排序算法前的准备项目结构Sort.javaAsserts.javaIntegers.javaTimes.javaStudent.java排序算法测试BubbleSort1.javaMain.java感谢小码哥的恋上数据结构,记录课程笔记。建议先看一下这篇博客: 复杂度知识以及LeetCode刷题指南。何为排序?排序前:3...原创 2020-03-26 14:22:02 · 3758 阅读 · 0 评论 -
【恋上数据结构】排序算法大全
排序算法大全冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)归并排序(Merge Sort)快速排序(Quick SortQuick)希尔排序(Shell Sort)堆排序(Heap Sort)计数排序(Counting Sort)基数排序(Radix Sort )桶排序(Bucket Sort)...原创 2020-03-26 22:55:29 · 912 阅读 · 2 评论 -
【恋上数据结构】冒泡排序、选择排序、堆排序
冒泡排序冒泡排序介绍排序准备工作冒泡排序-无优化冒泡排序-优化1从经典的冒泡排序开始!冒泡排序介绍冒泡排序也叫做起泡排序执行流程① 从头开始比较每一对相邻元素,如果第1个比第2个大,就交换它们的位置执行完一轮后,最未尾那个元素就是最大的元素。② 忽略①中曾经找到的最大元素,重复执行步骤①,直到全部元素有序。排序准备工作写一个抽象类 Sort.java实现自定义对象的比较(cm...原创 2020-03-26 00:39:38 · 1851 阅读 · 0 评论 -
《恋上数据结构第1季》字典树 Trie
字典树TrieTrie 简介Trie 实现接口设计源码测试在此致谢小码哥的恋上数据结构,堪称经典中的经典。在此致谢小码哥的恋上数据结构,堪称经典中的经典。在此致谢小码哥的恋上数据结构,堪称经典中的经典。Trie 简介Trie 也叫做字典树、前缀树(Prefix Tree)、单词查找树Trie 搜索字符串的效率主要跟字符串的长度有关优点:搜索前缀的效率主要跟前缀的长度有关缺点:需要耗...原创 2020-03-15 16:15:57 · 799 阅读 · 0 评论 -
《恋上数据结构第1季》二叉堆实现优先级队列
优先级队列优先级队列简介优先队列的底层实现二叉堆实现优先级队列源码测试代码在此致谢小码哥的恋上数据结构,堪称经典中的经典。在此致谢小码哥的恋上数据结构,堪称经典中的经典。在此致谢小码哥的恋上数据结构,堪称经典中的经典。优先级队列简介优先级队列也是个队列,因此也提供以下接口public interface Queue<E> { int size(); // 元素的数量 b...原创 2020-03-14 23:31:33 · 678 阅读 · 0 评论 -
《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题
二叉堆 BinaryHeap堆(Heap)堆的出现堆简介二叉堆(Binary Heap)获取最大值最大堆 — 添加最大堆 — 添加优化最大堆 — 删除replace最大堆 — 批量建堆(Heapify)自上而下的上滤自下而上的下滤效率对比二叉堆源码堆的基本接口 Heap.java抽象类 AbstractHeap.java二叉堆 BinaryHeap.java构建一个最小堆TOP K问题在此致谢小...原创 2020-03-14 21:01:31 · 1849 阅读 · 0 评论 -
恋上数据结构完整笔记(第1季 + 第2季)
Java 数据结构目录整理一下。。。【动态扩容数组】动态扩容数组 ArrayList实现源码(Java、C++)【链表List】单向链表 SingleLinkedList、双向链表 LinkedList 实现源码【循环链表CircleList】单向循环链表、双向循环链表以及约瑟夫环问题【队列Queue】队列 Queue、双端队列 DeQueue、循环队列 CircleQueue、双端循环...原创 2020-03-13 19:47:42 · 27001 阅读 · 14 评论 -
《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
哈希表引出哈希表哈希表哈希冲突JDK1.8的哈希冲突解决方案哈希函数如何生成key的哈希值引出哈希表设计一个写字楼通讯录,存放所有公司的通讯信息座机号码作为 key(假设座机号码最长是8位)公司详情(名称、地址等)作为 value添加、删除、搜索的时间复杂度要求是o(1)o(1)o(1)我们用这种思路,将座机号码作为索引值数组数组索引,公司详情作为数据元素值。由于数组添加、删除、...原创 2020-03-12 02:48:20 · 1229 阅读 · 0 评论 -
《恋上数据结构第1季》映射 TreeMap,HashMap,LinkedHashMap
映射(Map)Map的接口定义(Map.java)红黑树实现 TreeMapMap 在有些编程语言中也叫做字典(dictionary,比如 Python)Map 中的每一个 Key 是唯一的Map 中的每一个 Key 对应一个 ValueMap的接口定义(Map.java)public interface Map<K, V> { int size(); boolean...原创 2020-03-11 11:18:04 · 977 阅读 · 0 评论 -
《恋上数据结构第1季》集合 ListSet、TreeSet、HashSet
集合(Set)集合的接口定义(Set.java)双向链表(LinkedList)实现集合(Set)红黑树(RBTree)实现集合(Set)映射(Map)实现集合(Set)不存放重复的元素常用于去重集合的接口定义(Set.java)public interface Set<E> { int size(); boolean isEmpty(); void claer();...原创 2020-03-11 11:13:20 · 886 阅读 · 0 评论 -
《恋上数据结构第1季》红黑树(未完)
B树 和 红黑树B树红黑树小码哥的数据结构真的是很棒的课程,恋上数据结构与算法B树B树是一种平衡的多路搜索树,多用于文件系统、数据库的实现B树有以下特点:1个节点可以存储超过2个元素、可以拥有超过2个子节点拥有二叉搜索树的一些性质平衡,每个节点的所有子树高度一致比较矮红黑树...原创 2020-03-10 02:32:22 · 1920 阅读 · 7 评论 -
《恋上数据结构第1季》平衡二叉搜索树、AVL树
AVL树AVL树BinaryTree.javaBST.javaAVLTree.javaAVL树是在二叉搜索树的基础上学习的,【数据结构】二叉搜索树AVL树AVL 树是晶早发明的自平衡二叉搜索树之—平衡因子(Balance Factor):某结点的左右子树的高度差AVL树的特点每个节点的平衡因子只可能是1、0、-1(绝对值≤1,如果超过1,称之为“失衡")每个节点的左右子树高度差...原创 2020-03-08 11:08:58 · 1832 阅读 · 0 评论 -
《恋上数据结构第1季》二叉搜索树 BST
Java 实现二叉搜索树二叉搜索树(Binary Search Tree)二叉搜索树接口设计BinarySearchTree 类int size() //元素的数量boolean isEmpty() //是否为空void clear() //清空所有元素void add (E element) //添加元素void remove (E element) //删除元素boolean contains...原创 2020-03-06 22:03:06 · 2157 阅读 · 1 评论 -
《恋上数据结构第1季》动态数组实现栈
public class Stack <E> { private List<E> list = new ArrayList<>(); public void clear(){ list.clear(); } public boolean isEmpty(){ return list.isEmpty(); } public voi...原创 2020-03-04 13:58:28 · 1232 阅读 · 2 评论 -
《恋上数据结构第1季》队列、双端队列、循环队列、循环双端队列
队列/** * 队列 * @author yusael * @param <E> */public class Queue <E>{ private List<E> list = new LinkedList<>(); /** * 入队 */ public void enQueue(E element){ list....原创 2020-03-04 13:55:41 · 1581 阅读 · 0 评论 -
《恋上数据结构第1季》单向循环链表、双向循环链表以及约瑟夫环问题
双向链表List.java 接口AbstractList.java双向链表 LinkedList.java双向循环链表 CircleLinkedList.java双向循环链表解决约瑟夫环问题List.java 接口public interface List<E> { static final int ELEMENT_NOT_FOUND = -1; /** * 清除所有元素...原创 2020-03-04 13:43:42 · 1679 阅读 · 0 评论 -
《恋上数据结构第1季》单向链表、双向链表
单向链表java实现泛型单向链表List.java 接口AbstractList.javaLinkedList.javajava实现泛型单向链表List.java 接口public interface List<E> { static final int ELEMENT_NOT_FOUND = -1; /** * 清除所有元素 */ void clear(); ...原创 2020-03-02 21:29:26 · 3817 阅读 · 5 评论 -
《恋上数据结构第1季》动态扩容数组原理及实现
动态扩容数组接口设计Java实现int型动态数组Java实现泛型动态数组Java实现泛型动态数组优化C++实现动态数组接口设计int size(); // 元素的数量boolean isEmpty(); // 是否为空boolean contains (E element); // 是否包含某个元素void add (E element); // 添加元素到最后面E get (int...原创 2020-03-01 23:50:48 · 5558 阅读 · 7 评论