Looking for c Answers? Try Ask4KnowledgeBase
Looking for c Keywords? Try Ask4Keywords

C LanguageListas enlazadas


Observaciones

El lenguaje C no define una estructura de datos de lista enlazada. Si está utilizando C y necesita una lista enlazada, debe usar una lista enlazada de una biblioteca existente (como GLib) o escribir su propia interfaz de lista enlazada. Este tema muestra ejemplos de listas vinculadas y listas dobles vinculadas que pueden utilizarse como punto de partida para escribir sus propias listas vinculadas.

Lista enlazada individualmente

La lista contiene nodos que se componen de un enlace llamado siguiente.

Estructura de datos

struct singly_node
{
  struct singly_node * next;
};

Lista doblemente enlazada

La lista contiene nodos que se componen de dos enlaces llamados anterior y siguiente. Los enlaces normalmente hacen referencia a un nodo con la misma estructura.

Estructura de datos

struct doubly_node
{
  struct doubly_node * prev;
  struct doubly_node * next;
};

Topoliges

Lineal o abierto

introduzca la descripción de la imagen aquí

Circular o anillo

introduzca la descripción de la imagen aquí

Procedimientos

Enlazar

Unir dos nodos juntos. introduzca la descripción de la imagen aquí

void doubly_node_bind (struct doubly_node * prev, struct doubly_node * next)
{
  prev->next = next;
  next->prev = prev;
}

Hacer una lista enlazada circularmente

introduzca la descripción de la imagen aquí

void doubly_node_make_empty_circularly_list (struct doubly_node * head)
{
  doubly_node_bind (head, head);
}

Hacer una lista enlazada linealmente

introduzca la descripción de la imagen aquí

void doubly_node_make_empty_linear_list (struct doubly_node * head, struct doubly_node * tail)
{
  head->prev = NULL;
  tail->next = NULL;
  doubly_node_bind (head, tail);
}

Inserción

Supongamos que una lista vacía siempre contiene un nodo en lugar de NULL. Entonces, los procedimientos de inserción no tienen que tomar NULL en consideración.

void doubly_node_insert_between
(struct doubly_node * prev, struct doubly_node * next, struct doubly_node * insertion)
{
  doubly_node_bind (prev, insertion);
  doubly_node_bind (insertion, next);
}

void doubly_node_insert_before
(struct doubly_node * tail, struct doubly_node * insertion)
{
  doubly_node_insert_between (tail->prev, tail, insertion);
}

void doubly_node_insert_after
(struct doubly_node * head, struct doubly_node * insertion)
{
  doubly_node_insert_between (head, head->next, insertion);
}

Listas enlazadas Ejemplos relacionados