Redis設計與實現 資料結構與物件(二)

2021-09-24 11:36:19 字數 1487 閱讀 2132

定義

typedef

struct list list;

注意,可以返回鍊錶的長度,本質上是乙個雙端鍊錶

相關的api

函式作用

演算法複雜度

listcreate建立新鍊錶

o(1)o(1)

listrelease釋放鍊錶,以及該鍊錶所包含的節點

o(n)o(n)

listdup建立給定鍊錶的副本

o(n)o(n)

listrotate取出鍊錶的表尾節點,並插入到表頭

o(1)o(1)

listaddnodehead將包含給定值的節點新增到鍊錶的表頭

o(1)o(1)

listaddnodetail將包含給定值的節點新增到鍊錶的表尾

o(1)o(1)

listinsertnode將包含給定值的節點新增到某個節點的之前或之後

o(1)o(1)

listdelnode刪除給定節點

o(1)o(1)

listsearchkey在鍊錶中查詢和給定 key 匹配的節點

o(n)o(n)

listindex給據給定索引,返回列表中相應的節點

o(n)o(n)

listlength返回給定鍊錶的節點數量

o(1)o(1)

listfirst返回鍊錶的表頭節點

o(1)o(1)

listlast返回鍊錶的表尾節點

o(1)o(1)

listprevnode返回給定節點的前乙個節點

o(1)o(1)

listnextnode返回給定節點的後乙個節點

o(1)o(1)

listnodevalue返回給定節點的值

o(1)

迭代器可以從右向左迭代,也可以從左向右迭代,運用的時候需要指明以下爹地啊的方向

函式作用

演算法複雜度

listgetiterator建立乙個列表迭代器

o(1)o(1)

listreleaseiterator釋放迭代器

o(1)o(1)

listrewind將迭代器的指標指向表頭

o(1)o(1)

listrewindtail將迭代器的指標指向表尾

o(1)o(1)

listnext取出迭代器當前指向的節點

o(1)o(1)

Redis設計與實現 02 資料結構與物件

redis設計與實現 黃建巨集版的讀書筆記 struct sdshr c字串 sds獲取字串長度的時間複雜度為o n 獲取字串長度的時間複雜度為o 1 api 是不安全的,可能會造成緩衝區溢位 api 是安全的,不會造成緩衝區溢位 修改字串長度n次必然需要執行n次記憶體重分配 修改字串長度n次最多需...

Redis設計與實現之資料結構與物件 跳躍表

跳躍表 skiplist 是一種有序資料結構,它通過在每個節點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。跳躍表支援平均o logn 最壞o n 複雜度的節點查詢,還可以通過順序性操作來批量處理節點。在大部分情況下,跳躍表的效率可以和平衡樹相媲美,並且因為跳躍表的實現比平衡樹要來得更為...

Redis設計與實現 筆記(1) 基礎資料結構篇

1 redis自己構建了乙個名為sds dynamic string 的字串資料結構。struct sdshdr 遵循了c字串以空字元 佔1位元組 結尾的慣例,且該空字元不計入len屬性 2 sds的空間分配策略 1 listnodetypedef struct listnodelistnode 2...