definición
Como estructura de datos de uso común, la lista vinculada se crea en muchos lenguajes de programación avanzados, como: java; porque Redis se desarrolla en lenguaje C, pero no hay una estructura de datos de lista vinculada integrada en lenguaje C, por lo que Redis creó su propia Implementación de listas enlazadas.
Cada nodo de lista enlazada está representado por una adlist.h/listNode
estructura :
/* Node, List, and Iterator are the only data structures used currently. */
typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
Múltiples listNode
pueden formar una lista enlazada de dos extremos a través de prev
y next
punteros , como se muestra en la siguiente figura:
Una lista vinculada puede contener múltiples nodos de lista vinculada, adlist.h/list
/*
* 双端链表结构
*/
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;
list 结构为链表提供了表头指针
head 、表尾指针
tail y el contador de longitud len de la lista enlazada, mientras que los 和
miembros dup y free match` son funciones específicas de tipo necesarias para implementar listas enlazadas polimórficas:
dup
La función se utiliza para copiar el valor guardado por el nodo de la lista vinculada;free
La función se utiliza para liberar el valor guardado por el nodo de la lista enlazada;match
La función se utiliza para comparar si el valor almacenado por el nodo de la lista vinculada es igual a otro valor de entrada.
Resumir
- Las listas vinculadas se usan ampliamente para implementar varias funciones de Redis, como claves de lista, publicación y suscripción, consulta lenta, monitoreo, etc.
- Cada nodo de la lista vinculada está representado por una
listNode
estructura , y cada nodo tiene un puntero al nodo anterior y al nodo siguiente, por lo que la implementación de la lista vinculada de Redis es una lista vinculada de dos extremos. - Cada lista enlazada está representada por una
list
estructura , que tiene información como el puntero del nodo principal, el puntero del nodo final y la longitud de la lista enlazada. - Debido a que el nodo frontal del nodo principal de la lista vinculada y el nodo posterior del nodo final apuntan a él
NULL
, la implementación de la lista vinculada de Redis es una lista vinculada acíclica. - Al configurar diferentes funciones específicas de tipo para las listas vinculadas, las listas vinculadas de Redis se pueden usar para almacenar valores de varios tipos.