2.双向链表结构
3.双向链表遍历器
4.宏定义函数
5.定义函数
list结构和listNode结构的API list和listNode都有它们自己的一族API,这里贴出来学习一下redis的源码(ps:下面的代码都是我仿照redis改写能直接编译运行的代码)
list *listCreate(void)
void listRelease(list *list)
list *listAddNodeTail(list *list, void *value)
list *listInsertNode(list *list, listNode *old_node, void *value, int after)
void listDelNode(list *list, listNode *node)
迭代器 其实我对迭代器的概念非常陌生,因为我是纯c程序员,不会c++,这里直接跟着学了!
Redis针对list结构实现了一个迭代器,用于对链表进行遍历
迭代器的结构定义如下:
direction决定了迭代器是沿着next指针向后迭代,还是沿着prev指针向前迭代,这个值可以是adlist.h中的AL_START_HEAD常量或AL_START_TAIL常量:
学习一下迭代器的api实现:
listIter *listGetIterator(list *list, int direction)
void listRewind(list *list, listIter *li)
void listRewindTail(list *list, listIter *li)
listNode *listNext(listIter *iter)