栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis之链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis之链表

链表linkedlist
    • 链表在Redis中的作用
      • 链表节点
      • 链表结构
      • 链表示意图
      • 总结 : 链表的特点

linkedlist是一种有序的数据结构, 并且增加和删除效率高,C语言没有实现这种结果,所以Redis自己实现了这种结构

链表在Redis中的作用
  • 在Redis3.0之前中list底层可以用linkedlist来实现(数据少和小), 也可以用ziplist(数据大或者多)实现
  • 在Redis3.0之后, list多用linkedlist和ziplist一起来实现, 叫quicklist(之后的章节会讲)
链表节点

既然讲到了链表, 那么其中的节点是如何实现的那么必须要知道, 其实和java中linkedlistNode差不多

typedef struct listNode {
    struct listNode *prev;
    struct listNode *next;
    void *value;
} listNode;
  • 一个指向前面节点的prev指针
  • 一个指向后面节点的next指针
  • void* 代表可用存储任何数据, value域存储数据
链表结构
typedef struct list {
    listNode *head;   //头结点
    listNode *tail;   //尾结点
    void *(*dup)(void *ptr);  //节点复制函数
    void (*free)(void *ptr);  //节点释放函数
    int (*match)(void *ptr, void *key); //节点对比函数
    unsigned long len;  //链表所包含的节点数量
} list;
  • 一个指向头结点的指针 head(方便插入和删除)
  • 一个指向尾节点的指针 tail(方便插入和删除)
  • 复制节点的函数 dup
  • 释放节点的函数 free
  • 节点对比函数 match
  • 节点数量 len(就不需要去遍历链表来获取长度以便达到O(1))
链表示意图

下图就是大概的示意图, 帮助理解

总结 : 链表的特点

1. 双端 : 获取某一个节点的前驱和后驱节点的复制度都为O(1)

2. 无环 : head节点的prev和tail节点的next都为NULL, 不会产生环状

3. 有链表长度计数器 : 拥有len字段,可以直接获取链表长度

4. 有表头节点和表尾节点, 获取节点复杂度为O(1)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530628.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号