Análise do código-fonte Estrutura de dados subjacente do Redis - lista vinculada

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/listNodeestrutura :

/* 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 listNodepodem formar uma lista encadeada dupla por meio de preve nextponteiros , conforme mostrado na figura a seguir:

insira a descrição da imagem aqui

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:

  • dupA função é usada para copiar o valor salvo pelo nó da lista encadeada;
  • freeA função é utilizada para liberar o valor salvo pelo nó da lista encadeada;
  • matchA 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 listNodeestrutura 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 listestrutura , 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.

Acho que você gosta

Origin blog.csdn.net/m0_54369189/article/details/113703527
Recomendado
Clasificación