您的位置:首页 > 其它

第3章 链表

2015-08-24 16:44 169 查看

1. 链表和链表节点的实现

每个链表节点使用一个adlist.h/listNode结构来表示

/*
* 链表节点
*/
typedef struct listNode {

// 前驱节点
struct listNode *prev;

// 后继节点
struct listNode *next;

// 值
void *value;

} listNode;

使用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链表特性:
双端
无环:表头节点的prev指针和表尾节点的next指针都指向NULL,对链表的访问以NULL为终点
带表头指针和表尾指针
带链表长度计数器
多态:链表节点使用void *指针来保存节点值,并且可以通过list结构的dup、free、match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型的值

2. 链表和链表节点的API

listSetDupMethod

listGetDupMethod

listSetFreeMethod

listGetFreeMethod

listSetMatchMethod

listGetMatchMethod

listLength

listFirst

listLast

listPreNode

listNextNode

listNodeValue

listCreate

listAddNodeHead

listAddNodeTail

listInsertNode

listSearchKey

listIndex

listDelNode

listRotate 将链表的表尾节点弹出,然后将被弹出的节点插入到链表的表头,成为新的表头节点

listDup 复制一个给定链表的副本

listRelease 释放给定链表,以及链表中的所有节点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: