数据结构
文章平均质量分 92
地鼠工程师
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
redis6.0源码整数集合
整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合键的底层实现。typedef struct intset { //编码方式 uint32_t encoding; //集合包含的元素数量 uint32_t length; //保存元素的数组 int8_t contents[];} intset;contents数组是整数集合的底层实现:整数集合的每个元素都是contents数组的一个数据项(i原创 2020-07-30 21:28:26 · 174 阅读 · 0 评论 -
go map详细讲解
概述map是常见的一种数据结构声明和初始化遍历原创 2020-03-15 14:48:00 · 369 阅读 · 0 评论 -
go双链表list源码解读
什么是双链表双向链表,又称为双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。基本结构golang的双链表在container/list中包中,整个链表称为List。双向链表也是线性结构,由一个root节点起始,形成的双向循环链表Listtype ...原创 2020-03-21 10:40:26 · 205 阅读 · 0 评论 -
redis6.0源码动态字符串SDS
redis中没有使用传统c语言的字符串,而是自己构建了sds与c字符串的异同:C字符串SDS获取字符串长度的复杂度为O(N)获取字符串长度的复杂度为O(1)API是不安全的,可能会造成缓冲区溢出(手动分配)API是安全的,不会造成缓冲区溢出(预分配)修改字符串长度N次必然需要执行N次内存重分配修改字符串长度N次最多需要N次内存重分配(做了预分配和惰性空间释...原创 2020-05-04 22:38:10 · 442 阅读 · 0 评论 -
redis6.0源码双端链表
链表节点adlist.h/listNodetypedef struct listNode { struct listNode *prev;//前置节点 struct listNode *next;//后置节点 void *value;//节点值} listNode;typedef struct list { listNode *head;//表头节点 ...原创 2020-05-12 07:56:28 · 212 阅读 · 0 评论 -
redis6.0源码跳跃表
跳跃表主要用于有序集合键,另一个是在集群节点中用作内部数据结构。结构体定义跳跃表的结构定义在server.h/zskiplisttypedef struct zskiplistNode { sds ele;//成员对象 double score;//分数 struct zskiplistNode *backward; //层 struct zskiplistLevel { //前进指针 struct zskiplistNode *f.原创 2020-05-18 10:48:27 · 342 阅读 · 0 评论 -
redis6.0源码字典的实现
哈希表节点typedef struct dictht { //哈希表数组 dictEntry **table; //哈希表大小 unsigned long size; unsigned long sizemask; unsigned long used;} dictht;哈希表typedef struct dictEntry { //键 void *key; //值 union { void *val;原创 2020-05-13 10:03:32 · 349 阅读 · 0 评论
分享