Redis 学习笔记(篇一):字符串和链表 (2)

redis 的链表结构如下:

typedef struct listNode { struct listNode *prev; //前驱节点,如果是list的头结点,则prev指向NULL struct listNode *next;//后继节点,如果是list尾部结点,则next指向NULL void *value; //万能指针,能够存放任何信息 } listNode; typedef struct list { listNode *head; //链表头结点指针 listNode *tail; //链表尾结点指针 //下面的三个函数指针就像类中的成员函数一样 void *(*dup)(void *ptr); //复制链表节点保存的值 void (*free)(void *ptr); //释放链表节点保存的值 int (*match)(void *ptr, void *key); //比较链表节点所保存的节点值和另一个输入的值是否相等 unsigned long len; //链表长度计数器 } list;

java 的链表结构如下:

public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null && first.item != null) */ transient Node<E> first; /** * Pointer to last node. * Invariant: (first == null && last == null) || * (last.next == null && last.item != null) */ transient Node<E> last; ....... } redis 的链表和 java 的链表有什么不一样?

基本一致,都是双向不循环链表。

双向的优点就是可以向前遍历,也可以向后遍历。缺点就是每个节点都需要浪费一个指针去指向前一个节点。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdxjg.html