数据结构
DatDreamer
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap之transfer()扩容深入源码分析
引言:首先“打个广告”,对于sizeCtl变量,如果读者还认为取值-N 时代表有N-1个扩容线程(因为基本资料都是这么说的),建议先阅读我的另一篇文章:ConcurrentHashMap的sizeCtl含义纠正引言:看了很多资料,有说的好的,但感觉有些地方讲得不是很好,所以加入了自己的理解,写出了这篇博文,希望对各位有一点帮助。精华分析因为源码跟注释都很多,我先直接把精华的分析总结...原创 2020-04-07 17:53:35 · 1188 阅读 · 1 评论 -
ConcurrentHashMap的sizeCtl含义纠正
引言:本文基于JDK1.8版本,而且对ConcurrentHashMap有一定了解的人,本文并非科普该类的用法,而是针对sizeCtl的含义做出纠正科普文章推荐:深入浅出ConcurrentHashMap1.8sizeCtl定义及注释 /** * Table initialization and resizing control. When negative, the ...原创 2020-04-06 23:41:06 · 8723 阅读 · 13 评论 -
图的常见存储结构及各自的优缺点
以下说法均建立在简单图上,即无环无重复边的图。本文将介绍图的常见存储结构及各自的优缺点邻接矩阵邻接表十字链表邻接多重表边集数组eg:无向图:有向图:邻接矩阵用两个数组来表示图:一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中边(无向图)或弧(有向图)的信息若图有n个顶点,则邻接矩阵则为一个n*n的方阵定义为:以eg的图为例,得到的相应数组就是...原创 2020-02-24 16:28:45 · 7834 阅读 · 0 评论 -
二叉树的性质
以下性质均建立在:根结点为第1层的前提下性质1:第i层上至多有2i-1个结点(i≥1)第一层为根结点,1个,21-1=20=1 ;第二层至多两个,22-1=21=2;归纳易得该性质性质2:深度为k的二叉树至多有2k-1个结点(k≥1)是2k-1,而不是2k-1,注意与性质1的区别。性质2其实是由性质1得出:20+21+22+…+2k-1 = 2k-1,由等比数列求和可得性质3:终...原创 2020-02-22 11:16:49 · 181 阅读 · 0 评论 -
KMP算法详解
KMP算法是模式匹配算法,模式匹配算法就是比较两个字符串是否相等的算法。eg:(以下例子都建立在下标从1开始,0位在后续用于存放数组长度)S=“abcababca”,T=“abcabx”这就是最简单的匹配做法,但效率其实很低。首先,②③的判断是多余的,根据①已知首字符“a”与第二三位字符的“b,c”均不相等然后④⑤的判断也是可省略的,因为在T中,第一二位的“a,b”分别与第四五位的“...原创 2020-01-23 22:45:29 · 323 阅读 · 0 评论 -
循环队列
以下说法都是针对顺序存储结构实现的队列先理清思路(1)普通队列的元素满足:存储在数组的前n个单元 这一条件,因此队列元素出列时,由于队列元素都得向前移动,因此需要O(n)时间(2)为了省去O(n)时间,引入front与rear指针,分别指向队头元素、队尾元素的下一个位置。而rear不是指向队尾元素而是指向其下一个位置的原因是:避免当只有一个元素时,队头和队尾重合使处理变麻烦;当遵循上述规则...原创 2020-01-19 20:24:36 · 389 阅读 · 0 评论 -
常见链表结构
线性表,有顺序存储结构 和 链式存储结构两种,常见实现为一维数组和单链表。性能对比查找插入和删除顺序:O(1)顺序:O(n)单链表:O(n)单链表:O(1)显然,顺序存储结构适用于查找,链式存储结构适合于插入和删除操作,各有优缺点。上述两种都比较简单,实现本文不介绍,略提一下优缺点。接下来介绍其他的链表结构静态链表用数组描述的链表叫做静态链表。关键...原创 2020-01-19 17:30:30 · 703 阅读 · 0 评论