Estructura de datos: lista doblemente vinculada

La lista doblemente enlazada es una variación de la lista enlazada en la que la navegación es posible en ambas formas, ya sea hacia adelante o hacia atrás fácilmente en comparación con la lista enlazada única. A continuación se presentan los términos importantes para comprender el concepto de lista doblemente enlazada.

  • Link - Cada enlace de una lista enlazada puede almacenar un dato llamado elemento.

  • Next - Cada enlace de una lista enlazada contiene un enlace al siguiente enlace llamado Siguiente.

  • Prev - Cada enlace de una lista enlazada contiene un enlace al enlace anterior llamado Prev.

  • LinkedList - Una lista vinculada contiene el enlace de conexión al primer enlace llamado Primero y al último enlace llamado Último.

Representación de lista doblemente enlazada

Según la ilustración anterior, los siguientes son los puntos importantes que deben considerarse.

  • La lista doblemente enlazada contiene un elemento de enlace llamado primero y último.

  • Cada enlace lleva un campo de datos y dos campos de enlace llamados siguiente y anterior.

  • Cada enlace está vinculado con su siguiente enlace utilizando su siguiente enlace.

  • Cada enlace está vinculado con su enlace anterior utilizando su enlace anterior.

  • El último enlace lleva un enlace como nulo para marcar el final de la lista.

Operaciones básicas

A continuación se muestran las operaciones básicas respaldadas por una lista.

  • Insertion - Agrega un elemento al principio de la lista.

  • Deletion - Elimina un elemento al principio de la lista.

  • Insert Last - Agrega un elemento al final de la lista.

  • Delete Last - Elimina un elemento del final de la lista.

  • Insert After - Agrega un elemento después de un elemento de la lista.

  • Delete - Elimina un elemento de la lista con la tecla.

  • Display forward - Muestra la lista completa de forma progresiva.

  • Display backward - Muestra la lista completa al revés.

Operación de inserción

El siguiente código demuestra la operación de inserción al comienzo de una lista doblemente enlazada.

Ejemplo

//insert link at the first location
void insertFirst(int key, int data) {

   //create a link
   struct node *link = (struct node*) malloc(sizeof(struct node));
   link->key = key;
   link->data = data;
	
   if(isEmpty()) {
      //make it the last link
      last = link;
   } else {
      //update first prev link
      head->prev = link;
   }

   //point it to old first link
   link->next = head;
	
   //point first to new first link
   head = link;
}

Operación de eliminación

El siguiente código demuestra la operación de eliminación al comienzo de una lista doblemente vinculada.

Ejemplo

//delete first item
struct node* deleteFirst() {

   //save reference to first link
   struct node *tempLink = head;
	
   //if only one link
   if(head->next == NULL) {
      last = NULL;
   } else {
      head->next->prev = NULL;
   }
	
   head = head->next;
	
   //return the deleted link
   return tempLink;
}

Inserción al final de una operación

El siguiente código demuestra la operación de inserción en la última posición de una lista doblemente enlazada.

Ejemplo

//insert link at the last location
void insertLast(int key, int data) {

   //create a link
   struct node *link = (struct node*) malloc(sizeof(struct node));
   link->key = key;
   link->data = data;
	
   if(isEmpty()) {
      //make it the last link
      last = link;
   } else {
      //make link a new last link
      last->next = link;     
      
      //mark old last node as prev of new link
      link->prev = last;
   }

   //point last to new last node
   last = link;
}

Para ver la implementación en lenguaje de programación C, haga clic aquí .