Redis學習筆記(二) 鏈表

鏈表提供了高效的節點重排能力,以及順序性的節點訪問方式,而且能夠經過增刪節點來靈活地調整鏈表的長度。redis

redis中鏈表應用普遍,如list中就使用了鏈表。函數

每個鏈表節點使用listNode結構標識(雙向鏈表):學習

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

鏈表你們都熟悉不作過多說明,再看下list結構的實現:spa

typedef struct list{
    listNode *head;//表頭節點
    listNode *tail;/表尾節點
    unsigned long len;//鏈表所包含的節點數量
    void *(*dup)(void *ptr);//節點值賦值函數
    void  (*free) (void *ptr);//節點值釋放函數
    int (*match)(void *ptr,void *key);//節點值對比函數
}

Redis 鏈表實現的特色:
一、雙向鏈表,獲取前置後置節點的時間複雜度都是O(1);
二、無環,對鏈表的訪問以NULL爲終點。
三、帶有表頭表尾指針,程序獲取鏈表的表頭節點和表尾節點的複雜度爲O(1);
四、帶鏈表長度計數器,程序獲取鏈表中節點數量的複雜度爲O(1);
五、多態,鏈表節點使用 void* 指針保存節點值,並能夠經過list結構的dup、free、match 三個屬性爲節點值設置類型特定函數,因此鏈表能夠用於保存各類不類型的值。同設計

t說明:尊重做者知識產權,文中內容參考《Redis設計與實現》,僅在此作學習與你們分享。指針

相關文章
相關標籤/搜索