// 每個鍊錶節點使用乙個 listnode 結構來表示typedef struct listnode listnode;
//typedef struct list list;
redis 鍊錶實現的特性總結如下:
雙端:鍊錶節點帶有 prev 和 next 指標,獲取某個節點的前置節點和後置節點
無環:表頭節點的prev指標和表尾節點的next指標指向null,因此對鍊錶的訪問以null終止,無環
帶有表頭和表尾指標:通過list 的tail 和 head 指標,獲取鍊錶的表頭和表尾節點的複雜度為o(1)
帶有鍊錶長度計數器:通過list 的length屬性,獲取鍊錶長度的時間複雜度為o(1)
多型:鍊錶節點使用 void* 指標來儲存節點值,並且可以通過list 結構的 dup 、free、match 三個屬性為節點值設定型別特定函式,所以鍊錶可以用於儲存各種不同型別的值。
鍊錶被用來實現redis 的各種功能,比如列表鍵、發布與訂閱、慢查詢、監視器等
Redis 鍊錶
定義 每個鍊錶節點使用乙個 adlist.h listnode 結構來表示 typedef struct listnode listnode adlist.h list 列表結構 typedef struct list list 特性 redis 的鍊錶實現的特性可以總結如下 雙端 鍊錶節點帶有 p...
Redis設計與實現 2 鍊錶
鍊錶提供了高效的節點重排能力,以及順序性的節點訪問方式,並且可以通過增刪節點來靈活地跳轉鍊錶的長度。作為一種常用資料結構,鍊錶內建在很多高階的程式語言裡面,因為redis使用c語言並沒有內建這種資料結構,所以redis構建了自己的鍊錶實現。鍊錶在redis中的應用非常多,比如列表鍵的底層實現之一就是...
Redis 鍊錶和鍊錶節點
每個鍊錶節點使用乙個 adlist.h listnode 結構來表示 typedef struct listnode listnode 多個 listnode 可以通過 prev 和 next 指標組成雙向鍊錶。使用 adlist.h list 來持有鍊錶,操作起來會更方便 typedef stru...