sds(簡單動態字串)
sds的實現
struct sdshdr
;
問題:為什麼redis沒有直接使用c語言的字串而是使用了sds(****** dynamic string)呢? 鍊錶
鍊錶的實現
typedef
struct list list;
typedef
struct listnode listnode;
特點:
字典(map,一直鍵值對抽象資料結構)
字典的實現:
//字典
typedef
struct dict dict;
//雜湊表
typedef
struct dictht dictht;
//雜湊表節點
typedef
struct dictentity v;
} dictentity;
展示圖:
rehash步驟:
為字典的ht[1]雜湊表分配空間,這個雜湊表的空間大小取決於要執行的操作,以及ht[0]當前包含的鍵值對數量(也即是ht[0] .used屬性的值):
將儲存在ht[0]中的所有鍵值對rehash到ht[1]上面: rehash指的是重新計算鍵的雜湊值和索引值,然後將鍵值對放置到ht[1]雜湊表的指定位置上。
當ht[0]包含的所有鍵值對都遷移到了ht[1]之後(ht[0]變為空表),釋放ht[0],將ht[1]設定為ht[0],並在ht[1]新建立-乙個空白雜湊表,為下一次rehash .做準備。
漸進式rehash:擴充套件或收縮雜湊表需要將ht[0]裡面的所有鍵值對rehash到ht[1]裡面,但是,這個rehash動作並不是一次性、集中式地完成的,而是分多次、漸進式地完成的。
Redis 學習筆記 資料結構(2)
跳躍表 skiplist 跳躍表的實現 typedef struct zskiplist zskiplist typedef struct zskiplistnode level 後退指標 struct zskiplistnode backward 分值 double score 成員物件 obj ...
學習筆記 資料結構
一 常用的資料結構 1 線性資料結構 元素之間一般存在元素之間存在一對一關係,是最常用的一類資料結構,典型的有 陣列 棧 佇列和線性表 2 樹形結構 結點間具有層次關係,每一層的乙個結點能且只能和上一層的乙個結點相關,但同時可以和下一層的多個結點相關,稱為 一對多 關係,常見型別有 樹 堆 3 圖形...
學習筆記 資料結構 堆結構
堆結構 實質是陣列 特點 以陣列的形式去儲存完全二叉樹 原理 以前序遍歷完全二叉樹,得出結點的前序序列,以陣列的形式儲存該序列。查詢父,子結點通過陣列下標id間的轉換關係實現。優點 節省儲存空間,查詢效率高 缺點 1 只能表示完全二叉樹 更廣泛的可以說是完全n叉樹 2 對樹的插入,刪除操作執行效率低...