definição
Como uma estrutura de dados comumente usada, a lista vinculada é criada em muitas linguagens de programação avançadas, como: java; porque o Redis é desenvolvido na linguagem C, mas não há estrutura de dados de lista vinculada integrada na linguagem C, portanto, o Redis construiu sua própria implementação de lista encadeada.
Cada nó da lista encadeada é representado por uma adlist.h/listNode
estrutura :
/* Node, List, and Iterator are the only data structures used currently. */
typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
Múltiplos listNode
podem formar uma lista encadeada dupla por meio de prev
e next
ponteiros , conforme mostrado na figura a seguir:
Uma lista vinculada pode conter vários nós 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 e o contador de comprimento len da lista vinculada, enquanto os 和
membros dup e free match` são funções específicas de tipo necessárias para implementar listas vinculadas polimórficas:
dup
A função é usada para copiar o valor salvo pelo nó da lista encadeada;free
A função é utilizada para liberar o valor salvo pelo nó da lista encadeada;match
A função é usada para comparar se o valor armazenado pelo nó da lista encadeada é igual a outro valor de entrada.
Resumir
- As listas encadeadas são amplamente utilizadas para implementar várias funções do Redis, como chaves de lista, publicação e assinatura, consulta lenta, monitoramento, etc.
- Cada nó de lista encadeada é representado por uma
listNode
estrutura e cada nó tem um ponteiro para o nó anterior e o nó seguinte, portanto, a implementação de lista encadeada do Redis é uma lista encadeada de duas extremidades. - Cada lista vinculada é representada por uma
list
estrutura , que possui informações como o ponteiro do nó principal, o ponteiro do nó final e o comprimento da lista vinculada. - Como o nó frontal do nó principal da lista vinculada e o nó posterior do nó final apontam para ele
NULL
, a implementação da lista vinculada do Redis é uma lista vinculada acíclica. - Ao definir diferentes funções específicas de tipo para listas vinculadas, as listas vinculadas do Redis podem ser usadas para armazenar valores de vários tipos.