redis両端チェーンテーブル実装adlist
861 ワード
1.実現
redis両端チェーンテーブルの実現は非常に簡単で、元の双方向チェーンテーブルの基礎の上でまた1層を包んで、ヘッドノードとテールノードを増加して、このようにヘッドテール挿入削除時間の複雑度はすべてO(1)で、チェーンテーブルの長さlenを増加して、クエリーの時間の複雑度もO(1)になって、最初から最後まで遍歴しなくてもいいです
2.API関数
残りの方法はすべて比較的に簡単で、正常な双方向チェーンテーブルの挿入削除操作で、言いたくありません
/*
*
*/
typedef struct listNode {
//
struct listNode *prev;
//
struct listNode *next;
//
void *value;
} listNode;
/*
*
*/
typedef struct listIter {
//
listNode *next;
//
int direction;
} listIter;
/*
*
*/
typedef struct list {
//
listNode *head;
//
listNode *tail;
//
void *(*dup)(void *ptr);
//
void (*free)(void *ptr);
//
int (*match)(void *ptr, void *key);
//
unsigned long len;
} list;
redis両端チェーンテーブルの実現は非常に簡単で、元の双方向チェーンテーブルの基礎の上でまた1層を包んで、ヘッドノードとテールノードを増加して、このようにヘッドテール挿入削除時間の複雑度はすべてO(1)で、チェーンテーブルの長さlenを増加して、クエリーの時間の複雑度もO(1)になって、最初から最後まで遍歴しなくてもいいです
2.API関数
残りの方法はすべて比較的に簡単で、正常な双方向チェーンテーブルの挿入削除操作で、言いたくありません