redis資料結構之雙端鍊錶

2021-07-25 12:11:03 字數 916 閱讀 7780

redis

的鍊錶資料結構基於

adlist.h

檔案定義的以下三種資料結構來展開:

node:

typedef struct listnode listnode 這裡

node

的value

為什麼要弄成指標?

是為了相容多種型別的

node

,顯然這裡的

node

既可以儲存

int等常規數字,也可以存

string

,當然也可以存其他的複雜的

struct

,想怎樣都行,所以

redis

的鍊錶在

redis

的很多重要功能(如發布與訂閱,慢查詢,監視器)中都有應用。

list:

typedef struct list list

很明顯,

list

採用如此大的結構體儲存乙個鍊錶,是用空間換時間的路子,使得一些常用的鍊錶操作能在

o(1)

的複雜度下拿下。

同時,list

結構體中包含有三個函式指標,是為了相容不同型別的

value

結點,可以為特定型別的結點定製自己的複製、釋放、對比函式,非常靈活,這一種抽象思維值得借鑑。

迭代器iterator:

typedef struct listiter listiter

而迭代器的使用,則是一種外部封裝,使得一些對特定資料結構的遍歷,能用一套東西來完成,從而保護了內部的資料結構,也使得上層呼叫不用關心具體的實現,既安全又方便,何樂而不為?

【特麼c++的

stl中也抽出了乙個章節專門講迭代器,當年學的現在也忘記的差不多了。以後有空要去補起來,很多語言的優點都是互相借鑑的,恩。。自己要多讀書,夯實基礎!】

Redis 資料結構之List 雙端鍊錶

list 鍊錶作為陣列之外的一種常用序列抽象,是大多數高階語言的基本資料型別,因為 c 語言本身不支援鍊錶型別,大部分 c 程式都會自己實現一種鍊錶型別,redis 也不例外 實現了乙個雙端鍊錶結構。在redis中,list的最大長度為2 32 1。除了實現列表型別以外,雙端鍊錶還被很多 redis...

Redis底層資料結構之雙端鍊錶

鍊錶這種資料結構相信大家也不陌生,有很多態別,比如單向鍊錶,雙向鍊錶,迴圈鍊錶等,鍊錶相對於陣列來說,一是不需要連續的記憶體塊位址,二是刪除和插入的時間複雜度是 o 1 級別的,非常的高效,但比不上陣列的隨機訪問查詢方式。一樣的那句話,沒有最好的資料結構,只有恰到好處的資料結構,比如我們後面要介紹的...

Java資料結構之鍊錶 雙端鍊錶

鍊錶 linked list 是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標 pointer 使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了陣列隨機...