2.链表

一、链表和链表节点的实现

每个链表节点使用一个adlist.h/listNode结构表示:

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

多个listNode可以组成双向链表。但使用adlist.h/list来持有链表,操作更方便:

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

    //节点值对比函数
    int (*match)(void *ptr,void *key);
}list;
list结构和listNode结构构成的链表

Redis链表实现的特性:

  • 双向链表
  • 无环
  • 带表头指针和表尾指针
  • 带链表长度计数器
  • 多态:链表节点使用void*指针来保存节点值,并且通过list结构发dup、free、match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型值。



    链表和链表节点API

你可能感兴趣的:(2.链表)