top of page
Foto del escritorGerardo Acevedo Arzola

Listas Doblemente Enlazadas

Actualizado: 11 nov 2018

Crear listas doblemente enlazadas | Insertar datos al inicio de la lista | Insertar datos al final de la lista | Imprimir elementos de una lista | Borrar un dato de la lista


1. Listas Doblemente Enlazadas (Primera Parte)


En este vídeo aprenderemos a crear estructuras de datos de tipo lista doblemente enlazada: * Insertar datos al inicio de la lista

* Imprimir los datos de la lista que han sido introducido




Lista Dobles (Primera Parte)


En la cabecera de nuestro programa vamos a llamar las librerias stdio.h y stdlib.h.

Antes de declarar nuestro nuevo tipo de dato,en la cabecera del programa vamos a escribir #define Nodo struct nodo, esto quiere decir que cada vez que escribamos la palabra “Nodo” nos estamos refiriendo al nuevo tipo de dato que es struct nodo.

Ahora podemos declarar nuestra estructura simplemente poniendo Nodo, abrimos corchetes, nuestro nodo va a estar compuesto de un tipo de dato a almacenar y dos apuntadores de tipo Nodo,uno al dato siguiente y otro al dato anterior (Nodo*siguiente,*anterior).

Declaramos un nodo apuntador que nos ayudará a señalar el inicio de lista,en un inicio, debe apuntar a NULL.

● Función insertarInicio

Vamos a declarar una función de tipo void que recibirá como parámetro el tipo de dato que estemos guardando. A continuación declaramos un nodo apuntador donde se almacenará nuestro dato,para ello primero debemos reservar el espacio en memoria para un nuevo dato de tipo Nodo con ayuda de la función malloc de la librería stdlib.h, por lo tanto este apuntador lo igualamos a (Nodo*)malloc(sizeof(Nodo)).

Teniendo nuestro nuevo elemento Nodo, en su parte de dato le asignamos el dato nuevo a almacenar (parámetro de nuestra función) y en su parte de siguiente y anterior apuntaran en un inicio a NULL.

Para ingresar el nuevo dato a la lista declaramos un if donde tendremos que la condición si nuestro apuntador al inicio de la lista es nulo (NULL) en caso de ser verdadero el nuevo dato es el primer elemento y por consiguiente nuestro apuntador a inicio debe apuntar al nuevo nodo.

En caso de ser falsa la condición significa que nuestra lista tiene más de un nodo. Ya que estamos insertando al inicio significa que nuestro elemento nuevo tiene que ser el inicio de esta, por ello primero debemos unir nuestro nuevo elemento aislado a la lista haciendo que su parte apuntador a siguiente señale al apuntador inicio (ya que este apunta siempre al primer elemento de la lista),asi como,inicio en su parte de anterior debe apuntar al nuevo nodo.Por último ya ligado nuestro nuevo nodo, el apuntador al inicio apunta al nuevo nodo. Se cierra if y función.

● Función imprimirLista

Declaramos una función de tipo void y no recibirá ningún parámetro.

Declaramos una nodo apuntador auxiliar que nos ayudará para recorrer todo los nodos que conforman nuestra lista y que en un principio va hacer igual al apuntador inicio.

Insertamos un while con la condición: apuntador auxiliar sea diferente de NULL, dentro del while se imprimirá auxiliar en su parte de dato y como siguiente instrucción nuestro auxiliar va ser igual a auxiliar en su parte siguiente.Cerramos while y función.

● Función Main

En nuestra función principal vamos a declarar 3 variables, 2 datos enteros uno que nos dirá el número de datos a ingresar en la lista (N) y otro como variable para un for y como tercer variables en tipo de dato a almacenar.

El usuario primero deberá escribir el número de datos, después dentro de un for desde 0 a N-1 con paso de 1, el usuario meterá el dato para después llamar a la función insertarInicio pasándole como parámetro al dato,cerramos el for y por último llamamos imprimirLista para visualizar en pantalla la lista completa.

Para insertar un nodo nuevo en una lista simple enlazada aparte de tener un nodo apuntador a inicio, es necesario tener un nodo apuntador al último elemento de la lista y que en inicio sea igual a NULL.


Puedes descargar el código fuente de este programa en el siguiente enlace:


 

2. Listas Doblemente Enlazadas (Segunda Parte)


En este vídeo aprenderemos se muestran las siguientes funciones:

* Insertar datos al final de la lista doblemente enlazada

* Eliminar un dato de la lista.



Listas Dobles (Segunda Parte)

● Función insertarFinal

Vamos a declarar una función de tipo void que recibirá como parámetro el tipo de dato que estemos guardando. A continuación declaramos un nodo apuntador donde se almacenará nuestro dato,para ello primero debemos reservar el espacio en memoria para un nuevo dato de tipo Nodo con ayuda de la función malloc de la librería stdlib.h, por lo tanto este apuntador lo igualamos a (Nodo*)malloc(sizeof(Nodo)).

Teniendo nuestro nuevo elemento Nodo, en su parte de dato le asignamos el dato nuevo a almacenar (parámetro de nuestra función) y en su parte de siguiente y anterior apuntarán en un inicio a NULL.

Para ingresar el nuevo dato a la lista declaramos un if donde tendremos que la condición si nuestro apuntador al inicio de la lista es nulo (NULL) en caso de ser verdadero el nuevo dato es el primer elemento y por consiguiente nuestro apuntador a inicio y final deben apuntar al nuevo nodo.

En caso de ser falsa la condición significa que nuestra lista tiene más de un nodo. Para insertar el nuevo nodo al final, primero debemos unir nuestro nuevo elemento aislado a la lista haciendo que el nodo del apuntador final en su parte de siguiente sea igual al nuevo nodo y nuevo en su parte de anterior es igual al apuntador del final.Por último el nuevo nodo es el final de la lista, en consecuencia el apuntador final apunta al nuevo nodo.Se cierra if y función.

● Función borrarElemento

Declaramos una función de tipo void que recibirá como parámetro un variable (que es del tipo de dato de los elementos que estás almacenando),este dato es el elemento a buscar en la lista.

Se debe declarar un apuntador tipo nodo auxiliar que recorrerá cada nodo de la lista y en un prinicipio se iguala al apuntador inicio.

Dentro de un while con condición: apuntador auxiliar sea diferente de NULL, se abre un if con condición: auxiliar en su parte de dato es igual a el número a buscar, entonces si se cumple se toman estos tres casos con if´s anidados:

Condición No.01: El auxiliar sea igual al apuntador inicio. Primero tenemos que mover el apuntador inicio al nodo siguiente,después desligar al nodo haciendo que auxiliar en su parte de siguiente sea NULL e inicio en su parte de anterior sea NULL.

Condición No.02: El auxiliar sea igual a apuntador final. El apuntador final va ser igual a final en su parte de anterior y se aisla el nodo haciendo final en su parte de siguiente sea NULL y auxiliar en su parte de anterior sea NULL.

Condición No.03: Auxiliar no es el inicio o el final de la lista. Declaramos que auxiliar en su parte de anterior en su parte de siguiente(aux->anterior->siguiente) sea igual a auxiliar en su parte de siguiente y auxiliar en su parte de siguiente en su parte de anterior (aux->siguiente->anterior) sea igual a auxiliar en su parte de anterior. Se aisla el nodo haciendo a auxiliar en su parte de anterior y siguiente NULL.

Se cierran los if´s de las condiciones y el nodo auxiliar se libera con la funcón free() de la librería stdlib.h, sea hace un return y se cierra el if de aux con el dato a buscar.En caso que se siga recorriendo la lista, anterior va a hacer igual a auxiliar y auxiliar va a hacer igual a auxiliar en su parte de siguiente. Se cierra el while y la función.

● Función Main

En nuestra función principal vamos a declarar 3 variables, 2 datos enteros uno que nos dirá el número de datos a ingresar en la lista (N) y otro como variable para un for y como tercer variables en tipo de dato a almacenar.

El usuario primero deberá escribir el número de datos, después dentro de un for desde 0 a N-1 con paso de 1, el usuario meterá el dato para después llamar a la función insertarFinal pasándole como parámetro al dato,cerramos el for, se llama imprimirLista para visualizar en pantalla la lista completa. Después se hace la lectura del dato a eliminar (aquí podemos reutilizar la varible para ingresar datos) y se llama a la función eliminarElemento pasandole como parámetro el dato a eliminar,y por último, llamamos de nuevo a la función imprimirLista para verificar que el elemento haya sido quitado de la lista exitosamente.


Puedes encontrar el código fuente en el siguiente enlace:




46 visualizaciones0 comentarios

Entradas recientes

Ver todo

Comments


bottom of page