redis基礎結構之雙端鏈表

雙端鏈表

定義
 //鏈表信息
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;
//雙端鏈表節點信息
typedef struct listNode {
    struct listNode *prev;    //前驅節點
    struct listNode *next;    //後繼節點
    void *value;              //數據域
} listNode;

//迭代器的迭代方向
#define AL_START_HEAD 0
#define AL_START_TAIL 1

//鏈表的遍歷操作迭代器的定義如下所示:
//迭代器定義
typedef struct listIter {
    listNode *next;
    int direction;
} listIter;
結構示意圖:
   ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190618222527881.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3MjMyMjI4,size_16,color_FFFFFF,t_70)
優點:
  1).多態:使用void*保存節點值,並且設置特定函數,鏈表可以保存各種不同類型的值
  2).計算長度o(1)
  3).獲取前後節點都是o(1)

作用:
1).事務模塊使用雙端鏈表依序保存輸入的命令; 
2).服務器模塊使用雙端鏈表來保存多個客戶端; 
3).訂閱/發送模塊使用雙端鏈表來保存訂閱模式的多個客戶端; 
4).事件模塊使用雙端鏈表來保存時間事件(time event);
5).作爲列表鍵

特殊函數:
  listRotate : 將鏈表尾節點換到頭節點 (這個函數的意義是什麼呢??)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章