Redis-数据结构-链表-adlist.h/listNode
2017-08-27 00:24
701 查看
每个链表接点使用一个adlist.h/listNode结构表示:
typedef struce listNode {
//前置节点
struct listNode *prev;
//后置节点
struct listNode *next;
//节点的值
void *value;
}listNode;多个listNode可以通过prev和next指针组成双端链表。
使用adlist.h/list来持有链表,操作起来会更方便:
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;
Redis的脸表实现特点可以总结:
1、双端:链表节点带有prev和next指针;
2、无环:表头节点的prev与表尾节点的next只想NULL;
3、带表头指针和表尾指针:list机构的head和tail指针;
4、带有链表长度计数器:len
5、多态:链表可以保存各种不同类型的值。
typedef struce listNode {
//前置节点
struct listNode *prev;
//后置节点
struct listNode *next;
//节点的值
void *value;
}listNode;多个listNode可以通过prev和next指针组成双端链表。
使用adlist.h/list来持有链表,操作起来会更方便:
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;
Redis的脸表实现特点可以总结:
1、双端:链表节点带有prev和next指针;
2、无环:表头节点的prev与表尾节点的next只想NULL;
3、带表头指针和表尾指针:list机构的head和tail指针;
4、带有链表长度计数器:len
5、多态:链表可以保存各种不同类型的值。
相关文章推荐
- Redis-05Redis数据结构--链表( linked-list)
- 【Redis笔记(四)】 Redis数据结构 - list链表
- Redis之2-双端链表(adlist.c,adlist.h)
- 【Redis源码剖析】 - Redis内置数据结构之双向链表list
- redis源码解读之双向链表————adlist.h文件
- 【redis源码分析】双向链表---adlist
- redis源码分析之数据结构(一)链表adlist.c
- 【Redis笔记(四)】 Redis数据结构 - list链表
- Redis源码分析(二)——链表adlist
- 【Redis源码剖析】 - Redis内置数据结构之双向链表list
- redis源码分析(9)redis源码链表学习总结 adlist.h adlist.c
- java 中的JDK封装的数据结构和算法解析(集合类)----链表 List 之 LinkedList
- 【Leetcode】19. Remove Nth Node From End of List - 删掉链表倒数第n个节点
- 基本数据结构:链表(list)
- 【数据结构_链表_List_1045】集合的交运算实现
- [leetcode] Delete Node in a Linked List 删除链表中的一个结点
- 1.1数组和链表:19. Remove Nth Node From End of List(Leetcode)
- Redis数据结构详解之List(二)
- 链表-Remove Nth Node From End of List(删除指定的节点)
- 面试之路(28)-反转链表(reverse ListNode)