![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 91
喜欢吃animal milk
JAVA
展开
-
HashMap关键源码带读
链表转红黑树的阈值为8是为了在保持树的平衡和性能之间取得一个合适的平衡。当链表长度小于等于8时,红黑树的插入和删除操作相对链表操作来说,并没有明显的优势,反而可能会增加额外的开销。此时,继续使用链表结构即可。而当链表长度超过8时,红黑树的平衡性能就会比链表好很多。红黑树的平均时间复杂度为O(log n),而链表的平均时间复杂度为O(n)。因此,将链表转换为红黑树可以提高搜索、插入和删除等操作的效率。因此,8被选择作为链表转红黑树的阈值,是为了平衡树的性能和开销之间的权衡。原创 2024-03-30 09:37:35 · 1025 阅读 · 1 评论 -
排序算法 - 堆排序
大家好,今天给大家介绍一下常见排序算法中的堆排序(填坑)以上就是这篇博客的主要内容了,大家多多理解,下一篇博客见!原创 2024-03-28 22:55:31 · 489 阅读 · 0 评论 -
程序员心中应该有点B树
大家好,今天给大家介绍一下B树这篇博客就到这里,我们下一篇博客见!原创 2023-12-12 21:51:52 · 164 阅读 · 1 评论 -
并查集&LRU Cache
大家好,今天给大家介绍两种数据结构并查集&LRU CacheLRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。什么是Cache?狭义 的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较 快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度 差异的结构。原创 2023-12-04 14:36:35 · 856 阅读 · 1 评论 -
手撕红黑树(图文并茂)
大家好,今天带着大家手撕红黑树一 . 红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何 一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。// 新创建的节点默认是红色RED,BLACK思考:在节点的定义中,为什么要将节点的默认颜色给成红色的?不妨来看一下如果默认值给成黑色会发生什么?原创 2023-11-27 15:53:13 · 155 阅读 · 1 评论 -
手撕AVL_二叉平衡树(图文并茂)
大家好,今天带大加手撕AVL树的插入一 .为了AVL树实现简单,AVL树节点在定义时维护一个平衡因子,具体节点定义如下:int val;int bf;// 平衡因子 -> 当前节点的平衡因子=右子树高度-左子树的高度// 节点的左孩子// 节点的右孩子// 节点的双亲注意: 当前节点的平衡因子=右子树高度-左子树的高度。但是,不是每棵树,都必须有平衡因子,这只是其中的一种实现 方式。大家多多理解,我们下一篇博客见。原创 2023-11-25 20:24:25 · 353 阅读 · 2 评论 -
数据结构-顺序存储二叉树
大家好,今天给大家讲一下顺序存储二叉树顺序存储二叉树是一种将二叉树的节点按照从上到下、从左到右的顺序存储在数组中的方法。具体来说,顺序存储二叉树将二叉树的根节点存储在数组的第一个位置,然后按照从上到下、从左到右的顺序将二叉树的其他节点依次存储在数组中。对于任意一个节点的索引为i(i从1开始),其左子节点的索引为2i右子节点的索引为2i+1。这样,通过数组的索引关系,可以方便地找到节点的父节点、左子节点和右子节点。顺序存储二叉树的优点是可以使用数组的随机访问特性快速找到节点,不需要通过指针进行遍历。原创 2023-10-06 15:40:30 · 1883 阅读 · 4 评论 -
数据结构-优先级队列(堆)
堆(Heap)是一种基于完全二叉树的数据结构,具有以下特点:完全二叉树:堆是一种完全二叉树,即除了最后一层外,其他层的节点都是满的,并且最后一层的节点都靠左排列。堆序性:堆中的每个节点都满足堆序性质,即对于最大堆(Max Heap),父节点的值大于或等于其子节点的值;对于最小堆(Min Heap),父节点的值小于或等于其子节点的值。原创 2023-10-05 18:08:01 · 888 阅读 · 5 评论 -
集合-Map系列
大家好,今天给大家带来的是Map系列的集合,包括HashMap,TreeMap,LikedHashMap相关的内容。Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且K一定是唯一的,不能重复。在Map中,每个键都是唯一的,而每个键对应一个值。通过键可以快速地查找和获取对应的值。Map提供了一系列的方法来操作键值对,例如put()方法用于插入键值对,get()方法用于获取指定键对应的值,remove()方法用于删除指定键的键值对等。Map继承体系。原创 2023-10-04 11:37:07 · 247 阅读 · 10 评论 -
集合-set系列集合
大家好,今天给大家讲一下set系列集合的相关知识在 Java 中,Set 是一种集合类型,它是一个不允许包含重复元素的集合。Set 接口继承自 Collection 接口,定义了一些用于操作和管理集合的方法。继承体系:不允许重复元素:Set 中的元素是唯一的,不会包含重复的元素。当向 Set 中添加重复元素时,添加操作会被忽略。无序性:Set 中的元素没有固定的顺序,不会按照元素的插入顺序或者排序顺序进行存储。因此,不能通过索引来访问 Set 中的元素。无索引。原创 2023-10-01 09:39:08 · 522 阅读 · 1 评论 -
数据结构-哈希表
大家好,今天给大家介绍一下哈希表相关内容以及模拟实现哈希表(Hash Table),也称为散列表,是一种根据关键码值(Key)而直接进行访问的数据结构。它通过将关键码值映射到表中的一个位置来访问记录,以加快查找的速度。顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即,搜索的效率取决于搜索过程中元素的比较次数。原创 2023-09-30 19:49:13 · 756 阅读 · 2 评论 -
集合-List集合
大家好,今天给大家介绍一下List集合相关的知识在集合框架中,List是一个接口,继承自Collection。站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删 改查以及变量等操作。这篇博客很简单,主要是为后面的创作铺垫一下,也不要嫌弃太水,没办法。原创 2023-09-30 11:20:26 · 169 阅读 · 0 评论 -
集合-Collection
大家好,今天总结一下集合相关的内容。Collection 是一个 Java 接口,它是 Java 集合框架中的一部分。它代表了一组对象,这些对象被称为集合元素。Collection 接口提供了对集合进行操作的方法,例如添加、删除、遍历等。Collection 接口的实现类包括 List、Set 和 Queue。List 是一个有序的集合,允许重复元素;Set 是一个不允许重复元素的集合;Queue 是一个先进先出的集合。原创 2023-09-30 10:34:14 · 257 阅读 · 0 评论 -
程序员不得不知道的排序算法-上
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使 子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序核心步骤:原创 2023-09-27 21:01:03 · 697 阅读 · 2 评论 -
数据结构 - 泛型
今天给大家介绍一下泛型的使用一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的 代码,这种刻板的限制对代码的束缚就会很大。----- 来源《Java编程思想》对泛型的介绍。泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。原创 2023-09-27 14:56:50 · 266 阅读 · 1 评论 -
数据结构 - 二叉树
大家好,这篇博客给大家带来二叉树的概念,特性和基本操作的实现目标:1. 掌握树的基本概念2. 掌握二叉树概念及特性3. 掌握二叉树的基本操作树的知识远远不止这些,只能说是基础吧,大家好好消化,尤其是二叉树方面的代码一定要搞清楚往后面试说不定就考到了。1%29。原创 2023-09-19 23:38:39 · 1241 阅读 · 23 评论 -
栈的应用-综合计数器的实现
在实现综合计数器之前,大家应该先了解一下什么是前中后缀表达式前缀、中缀和后缀表达式是表示数学表达式的三种不同方式。前缀表达式(也称为波兰式或前缀记法):操作符位于操作数之前。例如,"+ 2 3"表示加法操作,其中2和3是操作数。中缀表达式:操作符位于操作数之间。这是我们通常使用的数学表达式表示方式。例如,"2 + 3"表示加法操作,其中2和3是操作数。后缀表达式(也称为逆波兰式或后缀记法):操作符位于操作数之后。例如,"2 3 +"表示加法操作,其中2和3是操作数。原创 2023-09-10 17:17:21 · 1086 阅读 · 27 评论 -
数据结构 - 栈
栈是一种数据结构,它遵循"后进先出"(Last In First Out,LIFO)的原则。栈可以看作是一种特殊的线性表,只能在表的一端进行插入和删除操作,这一端被称为栈顶。栈的另一端被称为栈底。原创 2023-09-10 15:02:57 · 216 阅读 · 0 评论 -
数据结构 - 双向链表
如上图所示,双向链表中包含了两个指针,一个指向前驱结点,一个指向后继节点,其中头结点没有前驱节点,尾结点没有后继节点前驱: 前驱指的是当前节点的前一个节点,即在链表中位于当前节点之前的节点。它可以通过前向指针(previous pointer)来访问。后继: 后继指的是当前节点的后一个节点,即在链表中位于当前节点之后的节点。它可以通过后向指针(next pointer)来访问。这篇博客大家应重点关注链表的设计,代码这个东西面试考的更多的是单链表,大家刷题更多的也是单链表,双向链表相对于就没有那么重要了。原创 2023-09-07 19:49:21 · 997 阅读 · 3 评论 -
数据结构 - 单链表
再讲解什么是链表时,先给大家讲一下大体上的分类线性表和顺序表大家多多刷题吧,链表可是面试中笔试题的重点!原创 2023-09-05 23:34:05 · 762 阅读 · 5 评论 -
数组模拟实现环形队列
笔者: 最爱吃兽奶博文内容: 数据结构队列的模拟实现这篇博客理解起来或许没有那么简单,我尽力讲的容易理解一点,接下来跟我一起去看看吧!队列是一种特殊的线性数据结构,它遵循先进先出(First In First Out,FIFO)的原则。队列可以看作是一种排队的数据结构,类似于现实生活中的排队。在队列中,新元素被添加到队列的末尾,而从队列中移除元素的操作只能从队列的前端进行。上图八个小球按序号依次入队列队列有两个基本操作:入队(enqueue)和出队(dequeue)。原创 2023-09-04 21:48:31 · 266 阅读 · 1 评论 -
稀疏数组的实现
大家好,好久不见了,这篇博客是数据结构的第一篇文章,望大家多多支持!稀疏数组(Sparse Array)是一种数据结构,用于表示大部分元素值为默认值的数组。在稀疏数组中,只有非默认值的元素被存储,而默认值的元素则被忽略。这样可以节省存储空间,特别适用于稀疏矩阵等大规模数据结构。原始数组的大小:记录原始数组的行数和列数。非默认值元素的个数:记录非默认值元素的个数。非默认值元素的位置和值:以二维数组的形式存储非默认值元素的位置和值。通过使用稀疏数组,可以在存储和传输数据时减少所需的空间和时间。原创 2023-09-03 21:38:58 · 795 阅读 · 3 评论