天天看點

Redis-資料結構-連結清單-adlist.h/listNode

每個連結清單接點使用一個adlist.h/listNode結構表示:

typedef struce listNode {
       //前置節點
       struct listNode *prev;
       //後置節點
       struct listNode *next;
      //節點的值
       void *value;  
}listNode;
           

多個listNode可以通過prev和next指針組成雙端連結清單。

使用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;
           

Redis的臉表實作特點可以總結:

1、雙端:連結清單節點帶有prev和next指針;

2、無環:表頭節點的prev與表尾節點的next隻想NULL;

3、帶表頭指針和表尾指針:list機構的head和tail指針;

4、帶有連結清單長度計數器:len

5、多态:連結清單可以儲存各種不同類型的值。

繼續閱讀