![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 93
zjruiiiiii
这个作者很懒,什么都没留下…
展开
-
HashMap最全面试题
翻译过来大概的意思是:理想情况下使用随机的哈希码,容器中节点分布在 hash 桶中的频率遵循泊松分布,按照泊松分布的计算公式计算出了桶中元素个数和概率的对照表,可以看到链表中元素个数为 8 时的概率已经非常小,再多的就更少了,所以原作者在选择链表元素个数时选择了 8,是根据概率统计而选择的。当 length =15时,6 和 7 的结果一样,这样表示他们在 table 存储的位置是相同的,也就是产生了碰撞,6、7就会在一个位置形成链表,4和5的结果也是一样,这样就会导致查询速度降低。原创 2022-12-22 12:02:37 · 2069 阅读 · 1 评论 -
与哈希函数有关的结构
经典的哈希表实现都是数组加链表,也有优化的实现,数组加红黑树。具体的可以了解哈希表的源码。数组是哈希表一个初始的桶区域,数组长度就是桶的个数,假设17,存记录的时候,先根据哈希函数算出一个哈希值(hashcode),然后再模17,得到的结果肯定是在 0 ~ 16 之间,然后挂在相应的区域下面;如果多个记录模完后值一样,那就顺着链表往下挂记录。删除,修改和查询操作也一样,根据哈希函数,相同的输入会导致相同的输出,将得到的哈希值模完17后,找到数组对应的位置,然后顺着链表往下操作。原创 2022-09-04 18:26:06 · 429 阅读 · 10 评论 -
资源限制类题目技巧大全
即使有些碰撞,一个文件中的数据多于1千万条,但没有关系。因为在前面我们算过,一个文件真正可以存的数据条数是1亿两千500条。1千万条只是比较保守的一个数,因此一个文件超了1千万条数据也不会有什么,也不会超的了多少。按照哈希函数的性质,一个相同的东西经哈希函数算出的哈希值一定相同。因此就一个东西就不可能会分配到多个文件当中。那么就可以用一个哈希表依次记录各个文件中出现次数最多的数,记录完一个文件的就释放哈希表的内存空间,再记录下一个文件中出现次数最多的数。原创 2022-08-22 11:37:18 · 809 阅读 · 18 评论 -
哈希表查找——等概率情况下查找成功和查找不成功的平均查找长度的计算
H(18) = (18x3) MOD 7 = 5,地址是5,因此放到散列表的数组下表为5的位置,但这个位置上已经有关键字11,遇到了冲突,此时我们根据线性探测再散列法来处理这个冲突,探测下一个位置6,6这个位置上已经存在关键字30则继续增加1,因此现在的新地址应为7,位置7上没有关键字,放入即可,到此冲突已经解决;H(14) = (14x3) MOD 7 = 0,地址是0,因此放到散列表的数组下表为0的位置,但这个位置上已经有关键字7,遇到了冲突,探测下一个位置1,位置1上没有关键字,放入即可;原创 2022-08-19 16:21:43 · 4669 阅读 · 13 评论 -
理解和熟悉递归中的尝试
递归的代码不要尝试去展开,它是需要一些自然智慧去理解的,并且是一个逐步尝试和改进的过程。原创 2022-07-29 22:37:17 · 525 阅读 · 22 评论 -
利用对数器验证算法代码程序
通常我们在笔试的时候或者参加编程大赛的时候,自己实现了一个算法,但是不能够判断该算法是否完全没问题,如果在比赛平台上验证,通常只会告诉你有没有错误,出了错不会告诉你哪里有问题,对于排错来说是非常坑爹的,所以对数器就横空出世了,对数器就是用一个绝对OK的方法和随机器生成的样本数据进行合体,如果你的算法是没问题的,那么和对数器的这个百分之百正确的方法一个元素一个元素的比较,也一定是equals的。如果返回false,说明你的算法有问题。简单来说,就是自己编写一个时间复杂度较低的算法和一个时间复杂度较高的算法进行原创 2022-07-04 18:26:57 · 527 阅读 · 37 评论 -
反射、枚举以及Lambda表达式
文章目录一、反射1.定义2.用途3.反射基本信息4.反射相关的类(重要)4.1 Class类(反射机制的起源 )4.1.1 Class类中的相关方法(方法的使用方法在后边的示例当中)4.2 反射示例4.2.1 获得Class对象的三种方式4.2.2反射的使用5.反射的优点与缺点二、枚举1.枚举的背景及定义2.枚举的使用2.1 switch方法2.2 Enum 类的常用方法3. 枚举的优点与缺点三、枚举和反射的联系四、Lambda表达式1.背景1.1 Lambda表达式的语法1.2 函数式接口2.Lambda原创 2022-01-28 13:27:51 · 4082 阅读 · 29 评论 -
哈希表、哈希桶数据结构以及刨析HashMap源码中哈希桶的使用
文章目录一、哈希表1.哈希表概念2.冲突的概念3.避免冲突与解决冲突3.1 避免冲突的方式1——哈希函数的设计3.2 避免冲突的方式2——负载因子的调节3.3 解决冲突的方式1——闭散列3.4 解决冲突的方式2——开散列、哈希桶(重要)4.哈希表查找成功与查找失败的求法4.1 查找成功的求法4.2 查找失败的求法二、用泛型实现开散列与开散列在源码上的底层实现1.用泛型实现开散列2.开散列在源码上的底层实现2.1 HashMap底层面试题一、哈希表1.哈希表概念可以不经过任何比较,一次直接从表中得到要搜原创 2022-01-26 14:54:33 · 2364 阅读 · 29 评论 -
Map和Set及其背后二叉搜索树的数据结构
文章目录一、二叉搜索树1.二叉搜索树的概念2.二叉搜索树的查找一、二叉搜索树1.二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树2.二叉搜索树的查找因为二叉搜索树中 public Node search(int key) { Node cur = root; wh原创 2022-01-24 14:19:50 · 789 阅读 · 16 评论 -
基于比较的常见的排序
文章目录一、基数排序二、直接插入排序1.直接插入排序思路与代码2.直接插入排序特点、时间复杂度、空间复杂度、稳定性分析3.折半插入排序(了解)三、希尔排序1.希尔排序思路与代码2.希尔排序特点、时间复杂度、空间复杂度、稳定性分析四、选择排序1.选择排序思路与代码2.选择排序特点、时间复杂度、空间复杂度、稳定性分析五、冒泡排序1.冒泡排序思路与代码2.冒泡排序特点、时间复杂度、空间复杂度、稳定性分析六、堆排序1.堆排序的思路与代码2.堆排序特点、时间复杂度、空间复杂度、稳定性分析七、快速排序1.快速排序的思路原创 2022-01-18 11:07:31 · 2324 阅读 · 28 评论 -
优先级队列(堆)及其背后的数据结构
文章目录一、堆1.堆的概念二、堆的基本操作1.创建堆与向下调整2.创建堆的时间复杂度3.向上调整4.模拟优先级队列的offer操作5.模拟优先级队列的poll操作三、优先级队列集合的使用1.优先级队列中的比较规则2.特殊的比较方式3.刨析PriorityQueue中的offer源码四、有关堆的面试题1.堆排序(从小到大排)2.topK问题3.查找和最小的K对数字认识堆前的基本概念:1、完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。2、满原创 2022-01-16 20:29:50 · 836 阅读 · 9 评论 -
树与二叉树数据结构详解
文章目录一、树的基本概念1.树的知识框架1.树的定义3.树的基本术语4.树的性质一、树的基本概念1.树的知识框架1.树的定义树是n(n>=0)个结点的有限集。当n = 0时,称为空树。在任意一棵非空树中应满足:有且仅有一个特定的称为根的结点。当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了自身,树是一种递归的数据结构。树作为一种逻辑结构,同时也是一原创 2022-01-11 11:10:56 · 1214 阅读 · 28 评论 -
栈和队列及其背后的数据结构
文章目录一、栈(Stack)1.栈的基本概念2.用顺序表实现栈3.用链表实现栈4.有关栈的相关面试题例一:不可能的输出序列例二:中缀表达式转后缀表达式二、队列(Queue)一、栈(Stack)1.栈的基本概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈原创 2022-01-03 14:03:51 · 3842 阅读 · 34 评论 -
集合Collection接口与ArrayList与及其背后的数据结构
文章目录一、Collection接口下的集合关系图二、包装类1.基本数据类型和包装类直接的对应关系2.包装类的装包(装箱)、拆包(拆箱)3.Integer包装类中特殊的valueOf方法三、ArrayList1.ArrayList简介2.ArrayList的使用2.1 ArrayList的构造方法2.2 ArrayList常见操作2.3 ArrayList的遍历2.4 迭代器ListIterator的ArrayList中add的关系3.ArrayList的扩容机制一、Collection接口下的集合关系原创 2022-01-01 10:23:44 · 1314 阅读 · 11 评论 -
数据结构KMP算法配图详解(C语言、Java实现,超详细)
文章目录一、什么是KMP算法?二、KMP算法的解决题型三、模式串移动距离的判断(next数组)四、KMP算法的具体实现五、KMP算法的时间复杂度六、next数组的改进--nextval数组及具体代码七、最后的话一、什么是KMP算法?KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法是在 BF 算法基础上改进得到的算法。学习 BF 算法我们知道,该算法的实现过程就是 “傻瓜式”原创 2021-10-18 15:25:45 · 4710 阅读 · 18 评论 -
《数据结构》第二章 | 线性表 知识梳理(应对期末考)
文章目录一、线性表的定义和特点及案例引入1.线性表的定义和特点2.案例引入(1) 一元多项式的运算(2) 稀疏多项式的运算(3) 图书信息管理系统二、线性表的类型定义三、线性表的顺序表示和实现1.初始化顺序表2.顺序表取值3.顺序表查找4.顺序表的插入5.顺序表的删除6.基本操作补充7.顺序表的特点四、线性表的链式表示和实现1.链表介绍及单链表、双链表、循环链表基本定义2.三个典型问题3.链表的特点及优缺点五、单链表1.单链表的定义和实现2.单链表的存储结构定义3.初始化单链表4.基本操作补充5.单链表的取原创 2021-09-12 20:20:38 · 2295 阅读 · 30 评论 -
《数据结构》第一章 | 绪论 知识梳理(应对期末考)
文章目录一、数据结构的研究内容及基本概念和基本术语二、算法、时间复杂度、空间复杂度总结 什么是数据结构? 数据结构是研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科。一、数据结构的研究内容及基本概念和基本术语 掌握数据、数据元素、抽象数据类型、数据结构、数据的逻辑结构与存储结构等概念。数据:是客观事物的符号表示,是所有能输入到计算原创 2021-09-04 13:23:46 · 903 阅读 · 15 评论