Redis数据结构——链表

1,链表结点的定义:

typedef struct listNode{
    
    
	//前置节点
	struct listNode *prev;
	//后置节点
	struct listNode *next;
	//节点的值
	void *value;
}listNode;

2,Redis中的链表的定义如下:

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;

3,Redis链表实现的特性可以总结如下:
1)双端:链表节点带有prev和next指针,获取某个节点的前置节点和后置节点的复杂度都是O(1)
2)无环:表头节点的prev指针和表尾节点的next指针都是指向NULL,对链表的访问以NULL为终点。
3)带有表头节点和表尾指针:程序获取链表的表头节点和表尾节点的复杂度是O(1)
4)带有联编长度计数器
5)多态:链表节点使用void*指针来保存节点值,并且通过dup、free、match三个属性为节点值设置类型特定函数,多以链表可以用于保存各种不同类型的值。

猜你喜欢

转载自blog.csdn.net/xiaoan08133192/article/details/115090712