链表的定义
C语言也没支持list,redis只能自己去实现,实现代码如下:
// adlist.h
/* Node, List, and Iterator are the only data structures used currently. */
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;
注意:链表的head的prev和tail的next都是NULL,所以这里的链表是无环双向链表。
网友评论