🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 2.2.1 adlist的结构 ```c typedef struct listNode { struct listNode *prev; // 前一结点 struct listNode *next; // 后一结点 void *value; // 当前节点的值 } listNode; typedef struct listIter { listNode *next; // 下一结点 int direction; // 迭代方向,0表示从头开始,1表示从尾开始 } 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; ``` 特性: - 带头结点、尾结点、长度属性,获取其值的时间复杂度为O(1) - 双端:每个结点都有`prev`和`next`属性 - 无环:头尾结点指向NULL - 多态:通过指定dup、free、match函数,使得链表可以保存不同类型的值