
数据结构
文章平均质量分 86
菊头蝙蝠
这个作者很懒,什么都没留下…
展开
-
并查集(UnionFind)总结
每个元素的数量通过size数组,初始化为1(刚开始每个元素都是一个集合)。只要将子节点的数量全部转移给父节点就行了,然后子节点的数量置空。根本不同的应用场景,权重变化有着不同的传递方式。思路:不同的集合,每次合并,都会让集合数量-1。我们只把数量保存在父节点上,也就是说。去获取当前index对应的集合数量。只要将二维转化为一维即可比如。原创 2022-09-20 01:34:34 · 504 阅读 · 0 评论 -
redis7.0源码阅读(五):跳表(skiplist)
redis跳表zslCreateNodezslCreatezslFreeNodezslFreezslGetRank理想跳表与redis中跳表区别zslRandomLevelzslInsertzslDeletezslDeleteNode上图总共有4层,自下往上,分别为level=1,2,3,4typedef struct zskiplist { struct zskiplistNode *header, *tail; unsigned long length; int level原创 2022-05-10 14:07:06 · 418 阅读 · 0 评论 -
B树的原理与实现
b树b树多叉树,降低层高。多叉树的作用,使得节点数量变少,查找节点的数量变少。多叉树与b树之间的关系1.多叉树没有约束平衡2.没有约束每个节点子树的数量3.数据是有规律的b树原创 2022-04-22 22:43:05 · 1025 阅读 · 0 评论 -
动手实现死锁检测组件(通过hook与有向图实现)
动手实现死锁检测组件(hook与有向图实现)一、如何理解死锁二、模拟实现一个死锁1、如何去模拟实现一个死锁?2、创建4个线程模拟实现死锁三、死锁检测1、实现hook2、构建有向图4、数据组织方式5、代码逻辑四、完整代码一、如何理解死锁比如线程A需要 线程B的资源才能解锁,线程B需要线程C的资源才能解锁,线程C需要线程A的资源才能解锁。现在A、B、C都不能获得想要的资源,于是都没法解锁,陷入了死锁。如何进行死锁检测?可以把死锁检测的问题转化为有向图的环路检测。为了能够实现死锁检测,首先要模拟一个原创 2022-04-12 22:21:23 · 1211 阅读 · 0 评论 -
定时器方案:红黑树、最小堆和时间轮的原理
网络事件和时间事件对于服务端来说,驱动服务端逻辑的事件主要有两个,⼀个是⽹络事件,另⼀个是时间事件;在不同框架中,这两种事件有不同的实现⽅式;第⼀种,⽹络事件和时间事件在⼀个线程当中配合使⽤;例如nginx、redis;第⼆种,⽹络事件和时间事件在不同线程当中处理;例如skynet;第一种// 第⼀种while (!quit) { int now = get_now_time();// 单位:ms int timeout = get_nearest_timer() - now;原创 2022-04-10 00:30:47 · 1321 阅读 · 0 评论 -
红黑树的原理及实现
红黑树一、一、原创 2022-03-26 19:48:23 · 3409 阅读 · 1 评论