链表文件 adlist.c 阅读

有两个部分:adlist.h 和 adlist.c

首先看看 adlist.h 里定义了哪些变量和函数,能了解个大概,就像目录一样。

adlist.c 是具体的实现,一个关于链表的操作,而且是一个双向链表

链表的话结构比较简单,总共有三个结构体:

listNode 用来定义节点的结构:上一个、下一个、当前值

listIter 用来定义迭代器的结构:下一个、方向(正向迭代还是逆向迭代)

list 用来定义链表的结构:头、尾、长度、三个函数(复制、匹配、销毁)


此外,还包含了大量的链表操作,常见的增删查改、还有迭代器、旋转的功能

结构体的定义不错,比如list来说,里面不光包含了list的head和tail、len,还包含了一些函数的指针,比如dup(复制)、free(释放)、match(按key查找),这样的话就可以自定义这些函数的具体实现,更加灵活。

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;

你可能感兴趣的:(链表文件 adlist.c 阅读)