数据结构
文章平均质量分 60
技术砖家--Felix
I'm felix li
展开
-
数据结构系列之跳表
什么是跳表跳表是一种数据结构。它允许快速查询一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(log n),优于普通队列的O(n)。引题线性表这种数据有两种具体实现, 数组和链表。具体的内容之前的文章里也有说过,可以翻翻看哇~。在这里两种数据结构中,数组的优点是查找速度快,而链表的优点是增删的效率高,这也是我们常说的。其实,非也。数组是一种内存连续的数据结构,其优点是可以通过首地址+N*(sizeOf(Node)) 来快速获取指定位置上的元素.假如我们不知道指定元素的位置呢?链转载 2023-02-16 11:49:40 · 739 阅读 · 0 评论 -
为什么MySQL数据库索引选择使用B+树?
为什么MySQL数据库索引选择使用B+树?在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树!学过数据结构的一般对最基础的树都有所认识,因此我们就从与我们主题更为相近的二叉查找树开始。一、二叉查找树(1)二叉树简介:二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质:1、任意节点左子树不为空,则左子树的值均小翻译 2021-10-12 15:42:45 · 619 阅读 · 0 评论 -
HashMap为什么选择红黑树?
为什么不选择AVL树?RB-Tree和AVL树作为BBST,其实现的算法时间复杂度相同,AVL作为最先提出的BBST,貌似RB-tree实现的功能都可以用AVL树是代替,那么为什么还需要引入RB-Tree呢?红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact| <= 1,它只要求部分达到平衡,但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的原创 2021-10-12 15:20:15 · 3302 阅读 · 0 评论 -
笔试算法《输出单向链表中倒数第k个结点》
描述输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。链表结点定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};正常返回倒数第k个结点指针,异常返回空指针本题有多组样例输入。输入描述:输入说明1 输入链表结点个数2 输入链表的值3 输入k的值输出描述:输出一个整数示例1输入:81 2 3 4 5 6 7 84输出:5代码public class Hua原创 2021-07-06 16:31:50 · 347 阅读 · 4 评论 -
笔试算法《从单项链表中删除指定节点》
描述输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。链表的值不能重复。构造过程,例如输入一行数据为:6 2 1 2 3 2 5 1 4 5 7 2 2则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示:1 2 表示为2->1链表为2->13 2表示为2->3链表为2->3->15 1表示为1->5链表为2->3原创 2021-06-24 15:28:19 · 125 阅读 · 0 评论 -
从源码分析ConcurrentHashMap如何实现线程安全的?
concurrentHashMap如何实现线程安全的?转载 2021-06-10 17:32:56 · 93 阅读 · 0 评论 -
关于集合list,map,set的几个问题解答!
1.list和set、map区别是什么,他们分别使用在什么场合?底层: linkedList的底层结构实现是利用对象Node,包含pre(上一个节点),next(下一个节点)和item(存储数据内容)实现,是一个双向链表;Linkedlist的删除和插入要比ArrayList快,只需要移动指针即可。ArrayList和LinkedList底层实现的区别 private static class Node<E> { E item; Node<原创 2021-06-10 09:47:04 · 172 阅读 · 0 评论 -
JDK1.7和1.8中HashMap的区别?
JDK1.7和1.8中hashmap的区别?实现方式jdk版本数据结构1.7数组+链表1.8数组+链表+红黑树(节点数>=8并且数组 长度>=64转换为数组+红黑树)put方法JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法(尾插法需要遍历链表),头插法速度较高,但这种插入方法在并发场景下如果多个线程同时扩容会出现循环列表。1.8之后,链表长度到8之后就变成红黑树了,遍历的效率变高,采用尾插法效率也没多大影响,同时红黑树接口也不存在原创 2021-06-01 09:28:42 · 219 阅读 · 0 评论 -
hash冲突原理及解决方法?
hash冲突原理及解决方法?hash冲突原理及解决方法转载 2021-06-01 09:12:59 · 119 阅读 · 0 评论 -
&(与运算)、|(或运算)、^(异或运算)的含义
按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011& 0000 0101 = 00000001 因此,3&5的值得1。另,负数按补码形式参加转载 2021-04-26 15:27:19 · 2311 阅读 · 2 评论 -
代码详解:如何判断链表有环?
如何判断链表有环?1,什么是有环链表?一个有环的链表 :eg. A->B->C->D->B->C->D如图:2,如何判断链表有环?第一种方法:遍历:出现两个相同节点则证明出现环,利用HashSet存放已遍历的节点,如果发现已经有节点存在于HashSet中,则证明有环出现。优点:简单缺点:时间复杂度高O(n),空间复杂度O(n)代码实现://构造节点内部类 /** * 遍历:出现两个相同节点则证明出现环 *原创 2021-03-23 11:38:25 · 355 阅读 · 1 评论 -
数据结构 图形演示网址
https://www.cs.usfca.edu/~galles/visualization/RedBlack.html原创 2020-10-14 11:03:23 · 464 阅读 · 0 评论 -
leetcode题目-合并二叉树+(算法优化感悟)
合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 ...原创 2019-11-13 11:10:21 · 234 阅读 · 2 评论 -
leetcode题目-对称二叉树
题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和迭代两种方法解决这个...原创 2019-10-31 21:46:55 · 169 阅读 · 0 评论 -
leetcode题目-翻转二叉树
题目如下翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无...原创 2019-10-22 22:54:32 · 199 阅读 · 0 评论 -
B树、B+树、B*树
B树B树即B-树,而不是两种树。概念:一棵m阶B树是一棵平衡的m路搜索树。特点:m即所有节点中孩子节点个数的最大值每个非根节点所包含的关键字个数j满足:ceil(m/2) - 1 <= j <= m - 1(ceil为向上取整,即大于该数的最小整数)节点的子节点数会比关键字个数加1根据以上两条可以得出,每个节点最多有m个分支,非根非叶节点至少有ceil(m/2)个分支B...转载 2019-10-21 16:14:27 · 209 阅读 · 0 评论 -
Hashtable原理以及源码解读
Hashtable的概念:1,Hashtable存储的内容是键值对(key-value)映射,其底层实现是一个Entry数组+链表;2,Hashtable和HashMap一样也是散列表,存储元素也是键值对;3,HashMap允许key和value都为null,而Hashtable都不能为null,Hashtable中的映射不是有序的;4,Hashtable和HashMap扩容的方法不一样...原创 2019-10-21 14:36:21 · 314 阅读 · 2 评论 -
HashMap原理介绍以及代码解读
关于HashMap的概念理解基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。( 除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序, 特别是它不保证该顺序恒久不变。另外,HashMap是非线程安全的,也就是说在多线程的环境下,可能会存在问题,而Hashtable是线程安全的。J...原创 2019-10-17 15:07:09 · 210 阅读 · 0 评论 -
HashMap中容量为2的整数次幂问题?
hashMap容量问题:hashMap是通过key的hash运算,解决key在哪,在java8中,key的位置下标通过(n - 1) & hash计算所得。下标计算方法设计好,将会为查询带来很多好处。1,为什么要保证容量n为2的整数倍?n为2的整数倍,那么n-1就是一个奇数,奇数的最后一位肯定为1.为1的好处就是(n-1) & hash的值后一位为0或者为1,如果n不是...原创 2019-10-16 18:45:12 · 590 阅读 · 6 评论 -
数据结构-红黑树原理分析
前言在阅读HashMap源码的时候发现,java1.8的HashMap的链表实现增加了红黑树,当链表长度超过指定阈值8的时候回进行树化。为了提高增删查的效率。而红黑树又比较复杂,所以专门写一篇关于红黑树的文章。概念R-B Tree,全称是Red-Black Tree,又称为“红黑树”,是一种特殊的二叉查找树。红黑树的每个结点上都有存储位表示结点的颜色, 可以是红(Red)或黑(Black...原创 2019-10-16 16:25:01 · 548 阅读 · 2 评论