top of page
Foto del escritorGerardo Acevedo Arzola

Pilas y Colas (Simulación)

Actualizado: 11 nov 2018

¡Hola! En este video aprenderemos a crear una simulación de recuperación de datos de pilas y colas en C.




Colas y Pilas


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

Antes de declarar las dos estructuras que vamos a utilizar,en la cabecera del programa vamos a escribir #define Nodo struct nodo y #define Lista struct lista, esto quiere decir que cada vez que escribamos la palabra “Nodo” nos estamos al nuevo tipo de dato que es struct nodo y la palabra “List” hace referencia a struct lista.

Declaramos la primera estructura Nodo la cual va a contener un dato y un Nodo apuntador al siguiente nodo.La estructura Lista está conformado por dos Lista apuntador llamado inicio y final, los cuales nos indicarán el inicio y el final de cada lista que declaremos.

● Función crearLista

Declaramos una función de tipo Lista llamado crearLista sin paso de parámetro.Dentro de la función declaramos una variable de tipo Lista,en este caso la variable se va a llamar lista.

Nuestra variable lista en su parte de inicio y su parte de final se igualan a NULL y con un return retornamos a lista.

● Función insertar

Vamos a declarar una función de tipo void que recibirá como parámetro el tipo de dato que vamos ha guardar y una variable de tipo Lista que será la lista donde se va meter el dato.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 lista en su parte de inicio es nulo (NULL) en caso de ser verdadero el nuevo dato es el primer elemento y por consiguiente nuestro apuntador inicio de la lista 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 a la lista en su parte de inicio (ya que este apunta siempre al primer elemento de la lista).Por último ya ligado nuestro nuevo nodo, lista en su parte de inicio apunta al nuevo nodo.Se cierra if y función.

● Función borrarPila

Declaramos una función de tipo void y va a recibir como parámetro una Lista apuntador,en este ejemplo lista.

Declaramos un Nodo apuntador auxiliar (aux) que esta apuntando a lista en su parte de inicio. Abrimos un if con la condición; aux es diferente a NULL, ya que en una Pila se saca en último elemento en entrar e insertamos al inicio de la lista vamos a ir quitando el elemento del inicio, entonces si la condición del if se cumple lista en su parte de inicio=inicio en su parte de siguiente y liberamos aux con la función free( ).Cerramos el if y la función.

● Función borrarCola

Declaramos una función de tipo void y va a recibir como parámetro una Lista apuntador,en este ejemplo lista.

Declaramos un Nodo apuntador auxiliar (aux) que está apuntando a lista en su parte de inicio.

Con un if con la condición: aux es diferente de NULL,es decir, si la lista no está vacía entonces abrimos otro if con la condición: aux es igual a lista en su parte de final, si es verdadero entonces el inicio como el final de la lista apuntan a NULL,si no declaramos un Nodo apuntador (ant) que apunte a NULL abrimos un while con la condición: aux siguiente es diferente de NULL dentro del while ponemos que ant se igual a aux y aux es igual a aux en su parte de siguiente y cerramos el while.

Luego ant en su parte de siguiente es igual a NULL, lista en su parte de final es igual a anterior cerramos el if,liberamos aux con free( ) y cerramos if y la función.

● Función main

Declaramos dos variables de tipo Lista: Cola y Pila,y las inicializamos con la función crearLista.

Declaramos 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 las funciones insertarPila e insertarCola pasándole como parámetro cada función la lista donde se tiene que insertar y el dato ingresado,cerramos el for. NOTA: Ya que estamos pasando la lista como apuntador es necesario pasar la lista con el símbolo “&”, ya que si este no se pone las modificaciones que se hagan en la función no se guardarán al salir de esta,por ejemplo, insertarPila(&Pila,dato).

Se llama imprimirLista para visualizar en pantalla las dos listas completa pasando como parámetro las listas a imprimir sin el símbolo “&” ya que no se le está haciendo ningún cambio a la lista. Se llama dos veces a la función borrarElemento y le pasamos como parámetro cada lista con el símbolo “&” e imprimimos de nuevo las listas para verificar su funcionamiento.


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


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

661 visualizaciones0 comentarios

Entradas recientes

Ver todo

Comments


bottom of page