Redis之链表

链表

链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点灵活调整链表的长度。

链表在Redis中应用非常广泛,比如列表的实现方式之一就是链表

链表实现

typedef  struct listNode{
       //前置节点
       struct listNode *prev;
       //后置节点
       struct listNode *next;
       //节点的值
       void *value;  
}listNode

虽然仅仅使用多个listNode就能组成链表,但使用list操作链表的话会更加方便

typedef struct list{
     //表头节点
     listNode *head;
     //表尾节点
     listNode *tail;
     //链表所包含的节点数量
     unsigned long len;
     //节点值复制函数
     void (*free) (void *ptr);
     //节点值释放函数
     void (*free) (void *ptr);
     //节点值对比函数
     int (*match) (void *ptr,void *key);
}list;

Redis链表特性:

  • 双端:链表具有前置节点和后置节点的引用,获取这两个节点时间复杂度都为O(1)。

  • 无环:表头节点的 prev 指针和表尾节点的 next 指针都指向 NULL,对链表的访问都是以 NULL 结束。  

  • 带链表长度计数器:通过 len 属性获取链表长度的时间复杂度为 O(1)。

  • 多态:链表节点使用 void* 指针来保存节点值,可以保存各种不同类型的值。并且具有list结构的dup,free,match三个特定函数。

posted @ 2021-09-29 15:36  刚刚好。  阅读(126)  评论(0编辑  收藏  举报