redis両端チェーンテーブル実装adlist


1.実現
/*
 *       
 */
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関数
残りの方法はすべて比較的に簡単で、正常な双方向チェーンテーブルの挿入削除操作で、言いたくありません