# 结构
# 用处
- List 对象
- 发布与订阅
- 慢查询
- 监视器
- 客户端状态信息
- 客户端输出缓冲区
# 定义
typedef struct listNode { | |
// 前置节点 | |
struct listNode *pre; | |
// 后置节点 | |
struct listNode *next; | |
// 节点的值 | |
void *value; | |
} listNode; | |
typedef struct list { | |
// 表头节点 | |
listNode *head; | |
// 表尾节点 | |
listNode *tail; | |
// 链表包含的节点数量 | |
unsigned long len; | |
// 节点值复制函数 | |
void *(*dup)(void *ptr); | |
// 节点值释放函数 | |
void (*free)(void *ptr); | |
// 节点值对比函数 | |
int (*match)(void *ptr, void *key); | |
} list; |
# 特点
- 双端,获取某个节点前置和后置节点的复杂度为 O (1)
- 无环,头节点的 pre 和尾节点的 next 指针都是 null
- 带表头指针和表尾指针,获取链表中头节点和尾结点的复杂度为 O (1)
- 带列表长度计数器,获取链表长度的复杂度为 O (1)
- 多态,void* 指针保存节点信息,dup、free、match 设置对应函数