nagios中的跳躍表

2021-09-30 09:43:07 字數 2264 閱讀 1757

typedef struct skiplistnode_structskiplistnode;

data用於存放指向實際資料的指標

forward為乙個指標陣列,forward[i]中的i值對應跳躍表中的一層,如果本skiplistnode在這一層中存在就指向下乙個skiplistnode,不存在的話為null

typedef struct skiplist_structskiplist;

current_level用於存放目前跳躍表有多少層

max_levels用於存放跳躍表最高會有多少層

level_probability用於存放隨機決策的值,nagios使用了0.5

items用於存放跳躍表中有多少個元素

allow_duplicates設定是否允許有重複的元素

compare_functions用於比較跳躍表中兩個元素的大小,用於跳躍表中元素的排序

head指向跳躍表中的頭元素

用於生成乙個新的skiplist

skiplistnode *skiplist_new_node(skiplist *list,int node_levels);

用於生成乙個新的skiplistnode

int skiplist_insert(skiplist *list, void *data);

插入乙個節點

int skiplist_random_level(skiplist *list);

返回隨機生成的level值

int skiplist_empty(skiplist *list);

除了skiplist結構和頭元素,其餘的元素全部free掉

int skiplist_free(skiplist **list);

將skiplist中的所有東西都free掉

void *skiplist_peek(skiplist *);

返回除頭元素外的第乙個元素當中的data指標

void *skiplist_pop(skiplist *);

返回除頭元素外的第乙個元素的指標,並從skiplist當中刪除該元素

void *skiplist_get_first(skiplist *list, void **node_ptr);

得到除頭元素外第乙個元素的指標

void *skiplist_get_next(void **node_ptr);

得到**node_prt指向元素的下乙個元素的指標

void *skiplist_find_first(skiplist *list, void *data, void **node_ptr);

查詢第乙個與data相等的元素,並返回指向該元素的指標,如果沒有找到返回null

void *skiplist_find_next(skiplist *list, void *data, void **node_ptr);

從*node_ptr指向的元素開始查詢下乙個與data相等的元素,如果沒有找到返回null

int skiplist_delete(skiplist *list, void *data);

直接呼叫skiplist_delete_all函式

int skiplist_delete_first(skiplist *list, void *data);

刪除查詢到的第乙個與data相等的元素

int skiplist_delete_all(skiplist *list, void *data);

不斷的呼叫skiplist_delete_first函式來刪除data相等的資料

int skiplist_delete_node(skiplist *list, void *node_ptr);

刪掉skiplist當中node_ptr指向的元素

Redis的跳躍表

typedef struct zskiplistnode level 層 層高1 32隨機,一般層數量越多,訪問其他節點速度越快 struct zskiplistnode backward 後退指標 只能退至前乙個節點 double score 分值 所有節點按分值從小到大排序 robj obj 成...

跳躍表是什麼

加入我們要開發乙個遊戲裡面類似拍賣行的搜尋功能,我們要支援輸入道具名稱的精準查詢和不輸入名稱的全量查詢.拍賣行商品數量幾十萬件,對應資料庫商品表的幾十萬條記錄,按照商品名稱精準查詢好辦,可以直接衝資料庫查出來,如果沒有商品名稱的全量查詢怎麼辦?總不能把資料庫所有記錄查出來,還要支援不同欄位的排序.拍...

四 跳躍表(Redis)

跳躍表 skiplist 是一種有序資料結構,它通過在每個節點中維持多個指向其他節點的 指標,從而達到快速訪問節點的目的。redis 的跳躍表由 redis.h zskiplistnode 和 redis.h zskiplist 兩個結構定 義,其中zskiplistnode結構用於表示跳躍表節點,...