月度归档: 2022 年 1 月

11 篇文章

数据结构之堆
定义 堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。 堆就基于完全二叉树的结构(完全二叉树就是除了最底层,其它层都必须填满,最后一层可以从左到右填满);平时生活中,我们有时会说一堆人,一堆某某东西,其实数据结构里的堆也和生活中的类似…
数据结构之链表
定义 链表就是线性表的链式存储方式。链表的内存是不连续的,前一个元素存储地址的下一个地址中存储的不一定是下一个元素。链表通过一个指向下一个元素地址的引用将链表中的元素串起来。 分类 链表分为单向链表(Singly linked lis)、双向链表(Doubly linked list)、循环链。 单…
数据结构之数组
定义 数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 优点 随机访问性强,查找速度快,时间复杂度是O(1)。 缺点 从头部删除、从头部插入的效率低,时间复杂度是O(n),因为需要相应的向前搬移和向后搬移 空间利用率不高 内存空间要求高,必须要有足够的连续的内存空间 …
树之红黑树
概括 红黑树也是一种自平衡的二叉查找树,是一种高效的查找树。它在每个节点增加了一个存储位记录节点的颜色,可以是RED,也可以是BLACK;通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的二倍,因而近似平衡。 具体性质如下: 每个节点颜色不是黑色,就是红色 根节点是黑色的…
树之B*树
是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针。 B*树 定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+树的1/2); B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中…
树之B+树
B+树是B树的变种,有着比B树更高的查询效率。 B+树的特性 B+树跟B树不同B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加; B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的…
树之B树
B树也称B-树,它是一棵多路平衡查找树,B树不要和二叉树混淆,在计算机科学中,B树是一种自平衡树数据结构,它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光…
树之AVL树
来源 对于一般的搜索二叉树而言,如果数据恰好是按照从小到大的顺序或者从大到小的顺序插入的,那么搜索二叉树就对退化成链表,这个时候查找,插入和删除的时间都会上升到O(n),而这对于海量数据而言,是我们无法忍受的。即使是一颗由完全随机的数据构造成的搜索二叉树,从统计角度去分析,在进行若甘次的插入和删除操…
树之二叉树
概括 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可…
Redis分布式锁实现原理
命令 SET key value [NX] [XX] [EX <seconds>] [PX [millseconds]] 必选参数说明 SET:命令 key:待设置的key value: 设置的key的value 可选参数说明 NX:表示key不存在才设置,如果存在则返回NULL XX:…