top of page
Foto del escritorGerardo Acevedo Arzola

Listas Enlazadas Simples

Actualizado: 10 nov 2018

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


1. Listas Simples (Primera Parte)


En este vídeo aprenderemos a crear la estructura de una lista enlazada simple, empezando con las siguientes funciones:

* Insertar datos al inicio de la lista

* Imprimir los datos de la lista que se han introducido hasta este momento.




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

Listas Simples

En la cabecera de nuestro programa vamos a llamar las librerías 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 un nodo apuntador al siguiente dato (Nodo* siguiente).

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 (Nodo* siguiente) apuntará 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).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.

 

2. Listas Simples (Segunda Parte)


En este vídeo aprenderemos a:

* Insertar los datos al final de la lista.

* Borrar un elemento de la lista que sea han introducido.




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


Listas Simples

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

* 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 (Nodo* siguiente) apuntará 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.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 dos apuntadores de tipo Nodo, un auxiliar que recorrerá cada nodo de la lista y en un principio se iguala al apuntador inicio, y un apuntador que siempre va a hacer el nodo anterior del auxiliar aunque en un principio solo se puede declarar ya que auxiliar está situado en el inicio de la lista y no tiene anterior.

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 y después desligar al nodo haciendo que auxiliar en su parte de siguiente se a NULL

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

Condición No.03: Auxiliar no es el inicio o el final de la lista.Ligamos la parte de siguiente de apuntador anterior al elemento que apunte auxiliar en su parte de siguiente, se aisla el nodo poniendo auxiliar en su parte de siguiente es NULL.

Se cierran los if´s de las condiciones y el nodo auxiliar se libera con la funció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 variable para ingresar datos) y se llama a la función eliminarElemento pasándole 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 correctamente.

No te olvides que nos puedes hacer comentarios vía correo electrónico.

54 visualizaciones0 comentarios

Entradas recientes

Ver todo

Opmerkingen


bottom of page