每個連結清單接點使用一個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、多态:連結清單可以儲存各種不同類型的值。