![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 82
学习数据结构
江海i
不积小流,无以成江海。
展开
-
数据结构【Mysql引擎 】之B+ 树
1. 存储底层1.1 硬盘这里主要解释的是机械硬盘,理解了如何进行IO才能更好的清除MySQL使用B+树的优势。机械硬盘整体结构:硬盘由多个盘片组成,每个盘片包含两个盘面,每个盘面有一个对应的读写磁头(由上到下从0开始编号),。盘面:盘面中灰色的圆环是一条条的磁道(由内到外从0开始编号);每条磁道上的一个弧段叫做一个扇区,扇区是磁盘的最小读写单位。一个扇区大小一般是512字节,也存在4096字节的。柱面:相同编号的磁道形成一个柱面,柱面数与磁道数相等。磁盘块:window叫做簇,L原创 2022-05-27 09:46:38 · 382 阅读 · 0 评论 -
数据结构之布隆过滤器
1. 布隆过滤器(Bloom Filter)如果使用哈希表来判断一个元素是否存在,虽然时间复杂度可以达到**O(1)**级别,但是空间的利用率不高。但同时,如果数据量过于庞大就需要过大的内存空间。1970年由布隆提出,一个空间效率高的概率型数据结构,用来判断一个元素一定不存在或者可能存在。本质上是一个很长的二进制向量和一系列Hash函数。优点:空间效率和查询时间都远远超过一般的算法;缺点:一定的误判率(可以通过代码尽可能的降低),删除困难。添加、查询的时间复杂度:O(k),k是哈希函数个数。原创 2022-05-26 20:57:30 · 222 阅读 · 0 评论 -
数据结构之并查集
1. 并查集(Union Find)也叫做不相交集合(Disjoint Set)核心操作:查找(Find):查找元素所在的集合;合并(Union):将两个元素所在的集合合并为一个集合;1.1 存储方式假设并查集处理的数据都是整性,可以使用整性数组来存储数据。存储结构逻辑结构可以看出:(0、1、3)是一个集合;(4、5、6、7)是一个集合;2自己一个集合。1.2 接口设计/** * @Description 并查集接口 * @date 2022/5/9 16:原创 2022-05-09 21:29:26 · 978 阅读 · 0 评论 -
数据结构之优先级队列、哈夫曼树和Trie
1. 优先级队列(Priority Queue)按照优先级的高低来出队。应用场景:医院挂号:按照病情和挂号时间来优先看病。操作系统:看任务类型的优先级1.1 实现1.1.2 存储结构和实现使用二叉堆中的最大堆可以良好的使用其特性。/** * @Description 优先级队列 * @date 2022/4/30 14:48 */public class PriorityQueue<E> { BinaryHeap<E> heap;原创 2022-05-01 08:47:07 · 228 阅读 · 0 评论 -
数据结构之二叉堆
1. 堆(Heap)也是一种树状的数据结构。任意节点的值总是大于等于子节点的值,称为最大堆、大根堆、大顶堆。任意节点的值总是小于等于子节点的值,称为最小堆、小根堆、小顶堆。堆中的元素必须具备可比较性。1.1 接口设计/** * @Description 堆接口 * @date 2022/4/29 8:52 */public interface Heap<E> { /** * 元素数量 * @return */ int siz原创 2022-04-29 20:52:17 · 843 阅读 · 0 评论 -
数据结构之哈希表
1. 哈希表不考虑顺序、不考虑Key的比较性,使用哈希表实现映射平均复杂度甚至可以到达O(1),一个典型的空间换时间,又称散列表。使用红黑树实现的TreeMap添加、删除和搜索的平均复杂度是O(logn),其特点是key必须具备可比较性且元素分布是顺序的。但在实际应用中,很多时候存储的元素不具有可比性,key也不需要具备可比性。1.1 实现方式根据传入的key计算出相应的hash值作为数组的索引。添加、搜索删除的流程都是O(1)。哈希表内部的数组元素,有时也被称为Bucket(桶),原创 2022-04-28 17:16:29 · 1404 阅读 · 0 评论 -
数据结构之集合和映射
1. 集合(set)不存放相同元素。1.1 接口设计因为集合中没有索引的概念,因此必须要给定一个遍历方法才能遍历该集合。/** * @Description 集合接口 * @date 2022/4/23 14:26 */public interface Set<E> { /** * 获取元素个数 * @return size */ int size(); /** * 判断是否为空 * @retu原创 2022-04-24 14:18:59 · 516 阅读 · 0 评论 -
数据结构之红黑树
1. 红黑树(Red Black Tree)简称RBTree,也是一种自平衡的二叉搜索树。1.1 性质节点是RED或者BLACK;根节点是BLACK;叶子节点(外部节点,空节点)都是BLACK;它会让之前度为0或者度为1的节点添加两个null节点,变成度为2的节点;RED的子节点必须都是BLACK;RED节点的parent都是BLACK;从根节点到叶子节点的所有路径上不能有2个连续的RED节点;从任一节点出发到叶子节点的所有路径都包含相同数目的BLACK节点...原创 2022-04-23 10:15:52 · 902 阅读 · 0 评论 -
数据结构之B树
1. B树(B-tree、B-树)B树是一种平衡的多路搜索树,多用于文件系统、数据库的实现。1.1 特点一个节点可以存储超过2个元素,可以拥有超过2个字节点;拥有二叉搜索树的一些性质;平衡:每个节点的所有子树高度一致;比较矮。1.3 m阶B树的性质(m ≥ 2)假设一个节点存储元素个数为X根节点:1 ≤ x ≤ m - 1非根节点:ceil(m / 2) - 1 ≤ x ≤ m -1 注:(ceil向上取整)。如果有子节点,子节点个数 y = x + 1①. 根节点原创 2022-04-17 17:05:10 · 4634 阅读 · 0 评论 -
数据结构之AVL树
1. 平衡二叉搜索树(Balanced Binary Search Tree)平衡:当节点数量固定时,左右子树的高度越接近,这颗二叉树就越平衡,即高度越低。最理想的平衡就是像完全二叉树和满二叉树一样,高度最小。常见平衡二叉搜索树:AVL树红黑树改进方案:在二叉搜索树的基础上进行改进,在节点添加、删除之后,尽量让二叉树恢复平衡。改进前:改进后:但如果调整的次数过多,也有可能会增加时间复杂度。因此使用尽量少的调整次数达到适度的平衡即可。2. AVL树2.1 AVL概念原创 2022-04-16 21:33:41 · 523 阅读 · 0 评论 -
数据结构之二叉搜索树
1. 二叉搜索树(Binary Serach Tree)英文简称BST,又称二叉查找树、二叉排序树。特点:任意一个节点的值都大于其左子树所有节点的值;任意一个节点的值都小于其右子树所有节点的值;它的左右子树也是一颗二叉搜索树;存储是元素必须具备可比较性;大幅度提高搜索数据的效率。如图:1.1 接口设计int size() :返回元素数量;boolean isEmpty():是否为空;void clear():清空所有元素;void add(E e):添加元素;void原创 2022-04-12 15:52:10 · 296 阅读 · 0 评论 -
数据结构之树与二叉树概念
1. 树1.1 树的概念相同父节点的节点称为兄弟节点;最上方的节点称为根节点;没有任何节点的树称为空树;子树:节点的子节点也可以称为子树;节点的度:子树的个数;树的度:所有节点度中的最大值;叶子节点:度为0的节点;非叶子节点:度不为0的节点;层数:根节点为第一层,往下累加;节点的深度:根节点到该节点的唯一路径上的节点总数;节点的高度:从当前节点到最远的叶子节点的路径上的节点总数;树的深度:所有节点深度的最大值;树的高度:所有节点高度的最大值;树的深度等于树的高度。有序树:原创 2022-04-09 14:27:40 · 881 阅读 · 0 评论 -
数据结构之栈和队列
1. 栈栈是一种特殊的线性表,只能够在一端进行操作。特点是后进先出LIFO。每加入一个元素会放在栈顶,将之前的元素往栈顶的位置移动。出栈的元素也只能是栈顶元素。1.1 接口设计int size():返回元素数量;boolean isEmpty():栈是否为空;void push(E e):元素入栈;E pop():元素出栈;E top():返回栈顶元素。1.2 方法实现栈中的方法实际上可以直接运用ArrayList或者是LinkedList中的方法,这里没有使用。1.2原创 2022-04-08 15:15:34 · 712 阅读 · 0 评论 -
数据结构之双向链表和循环链表
1. 双向链表顾名思义双向链表就是指每个节点都有next指向后驱和prev指向前驱。并且多出了last指针指向尾节点。比如JDK官方的LinedList就是实现的双向链表。1.1 方法实现因为双向链表和单向链表中的要实现的方法基本一致,所以这里直接写实现。1.1.1 环境变量和内部类环境变量:新增了尾节点last指针 /** * 链表长度 */ private int size; /** * 头节点 */ priv原创 2022-04-06 20:46:37 · 1920 阅读 · 0 评论 -
数据结构之单向链表
1. 概念链表是一直链式存储的线性表,所有的元素的内存地址不一定是连续的。2. 成员变量和接口设计2.1 成员变量 /** * 链表长度 */ private int size; /** * 头节点 */ private Node<E> first;2.2 节点类 private static class Node<E>{ E element; Node<E&原创 2022-04-06 10:28:44 · 939 阅读 · 0 评论 -
数据结构之顺序表
根据Java中ArrayList模仿实现线性表1. 线性表概念具有n个相同类型元素的有限序列2. 成员变量和接口设计2.1 成员变量因为线性表是根据数组来实现的,所以需要一个数组来存储元素,并且一个size方法来记录表中数据数量。 /** * 元素的数量 */ private int size; /** * 所有的元素 */ private E[] elements;2.2 接口设计int size():返回.原创 2022-04-05 14:48:13 · 855 阅读 · 0 评论