redis源码浅见之adlist

redis源码浅见之adlist

adlist是redis项目封装的一个链表操作的库,其官方解释为A generic doubly linked list implementation,实际是组装了一个带头节点的双向非循环链表头,节点自持链表首尾两个数据节点,依次达到快速操作的目的。
源码链接如下:
adlist.h
adlist.c

难点

  • 什么是链表
  • 链表的基本操作(指针操作)

亮点:是listIter这个struct的封装和实现,它封装了链表的操作,如此在了解链表的基础知识后,可以很快入手adlist的使用,且由于封装严格,所以基本不会出现指针操作失误的情况。

链表的核心:一个数据节点分为两部分:数据部分和指针部分。数据部分用于存储数据,指针部分可是一个本类型的指针,由此可以指向任意一个同类型的数据节点,有序的将多个数据节点组装起来后,便生成一个链表。数据节点的组装必须是有有序的,形成一种链式结构。另外指针部分可以是一个或者两个,一个则只能有一种指向,两个则可以前后同时指向。

有时链表还存在一个头节点,头节点可以与数据节点是同类型的,也不可以不同类型,数据节点随时都有可能变更,但头节点不会,在链接创建之初被创建,直到链表销毁,头节点一般持有首部数据节点或者尾部数据节点,或者两个均持有。

链表分类

  • 指向不同
    • 单向链表
    • 双向链表
  • 循环
    • 循环链表,首尾相接
    • 非循环链表,从尾部无法快速找到首部
  • 头节点
    • 带头节点
    • 不带头节点

PS:阅读redis源码,特此记忆,望坚持。

你可能感兴趣的:(Redis,C)