Está en la página 1de 12

Carátula para entrega de prácticas

Facultad de Ingeniería Laboratorio de docencia

Laboratorios de computación
salas A y B
Edgar Tista García
Profesor:

Asignatura: Estructura de Datos y Algoritmos I

3
Grupo:

7
No de Práctica(s):

Nava Cruz Alejandro


Integrante(s):

2019-1
Semestre:

22/Sep/2018
Fecha de entrega:

Observaciones:

CALIFICACIÓN:
Guía práctica de estudio 07. Estructuras de datos
lineales: Lista simple y lista circular.

Objetivo:
Revisarás las definiciones, características, procedimientos y ejemplos de las estructuras
lineales Lista simple y Lista circular, con la finalidad de que comprendas sus estructuras y
puedas implementarlas.

Se explican 2 tipos de listas:

-Lista Ligada Simple

-Lista Ligada Circular

La lista ligada simple está constituida por un conjunto de nodos alineados de forma lineal,
unidos entre sí por una referencia, lo visto en clase nos marca que esta debe tener un dato,
y una referencia al siguiente nodo.

A pesar de que su parecido a los arreglos sea demasiado, las listas no tienen un tamaño
fijo, y no funcionan por índices, sino referencias.

Aquí hacemos uso de varias funciones, ya sea para agregar, eliminar y visualizar los datos
que contiene cada uno de los elementos de la lista.

Una de las aplicaciones vistas en clase es la de un reproductor de música, ya que funciona


de manera secuencia, pero con distintos tamaños en los elementos, en este caso, las
canciones, en el ejemplo visto en la práctica, este se podría implementar en las páginas
web y/o redes sociales, ya que cada publicación se muestra de manera secuencial, en la
cual, el siguiente elemento mostrado es, lógicamente, la siguiente publicación.

La diferencia entre la lista ligada simple y la circular, es que la simple al momento de llegar
al tail, ya no se puede recorrer al siguiente elemento, ya que este apunta a NULL, sin
embargo, la lista ligada circular no apunta al mismo, si no que este apunta al primer
elemento de la lista, de ahí su nombre, un ejemplo de aplicación podría ser igualmente en
el reproductor de música, ya que existe una opción que permite repetir las canciones una
vez terminada la lista.

Ejercicio 1:

a) Para este punto lo que se hizo fue crear un menú utilizando switch-case, imprimiendo
las opciones a escoger y preguntando al usuario su respuesta seleccionada,
asignando a cada "case" una función, entregando el valor que tendrá el nodo.

b) Para agregar la función eliminar i-esimo, primero se pregunta qué posición se


eliminará luego se agrega una condicional, comprobando de que la lista exista y no
este vacía, luego se continúa creado al nuevo head y una variable temporal para no
perder al actual head, y existen 2 posibilidades, la primera en la que la lista tenga un
solo elemento y la segunda en la que existe más de un elemento y se necesita una
variable auxiliar y al current, recorriendo sus lugares para borrarlo en la posición
deseada y liberando su memoria. Finalmente se agregó al menú.
c) Para elaborar la función eliminar mayores que se llamó a una función llamada de la
misma manera. Primero crea una lista nueva y se le pide al usuario que ingrese los
elementos que conformarán la lista. Después de esto muestra en pantalla la lista con
los valores dados y manda a llamar a la función para eliminar a los mayores.
La función toma como parámetro la lista en la cual eliminará, y tendrá 1 variable que
servirá como contador para cuando encuentre un elemento que elimine, y una donde
se guardará el valor introducido por el usuario que será el número con el que irá
comparando cada valor. Además, incluye un arreglo para guardar los elementos que
elimine y mostrarlos al final. Antes de empezar a recorrer la lista debe comprobar que
la lista no está vacía, después de eso, procederá a recorrer la lista con ayuda de un
nodo temporal. El programa debe ir comparando si el valor del nodo es menor al
valor introducido por el usuario, en caso de ser así, guarda el valor del nodo que se
eliminará en el arreglo y aumenta el contador en 1. Luego de esto crea un nuevo
nodo auxiliar y lo asigna al siguiente nodo para eliminarlo. Actualiza la referencia del
nodo en que se encuentra para que ahora tenga como siguiente al siguiente del que
esta por eliminar y una vez hecho esto, hace que el nodo auxiliar sea nulo y después
libera el espacio de memoria que tenía asignado
En caso de que el valor del nodo no sea mayor que el introducido por el usuario,
simplemente hace que el nodo temporal adquiera la referencia al siguiente del que se
encuentra y repetirá estas instrucciones hasta que el nodo siguiente sea nulo. De
esta manera llegará al último nodo de la lista, así que después del ciclo lleva a cabo
las instrucciones una última vez.
d) Para implementar esta función lo que se hizo es crear variables temporales y
contadores para ir recorriendo la lista de elementos, con un ciclo for implementamos
la comparación, y luego con el segundo contador imprimimos el número de veces
que se repetía la función, si este valor no se incrementaba, el programa imprimía que
no existía valor a comparación.
Ejercicio 2:
a) Para comprobar el funcionamiento del archivo “.h” solicitado, implemente el uso de
lista de la misma manera que lo implemente con el de listas enlazadas simples,
pidiendo valores al usuario para luego mandarlo a la función solicitada.
b) Se creó una nueva biblioteca llamada listacircAutomovil.h en donde se crea una
estructura usando typedef llamada Automóvil. Está conformada por datos de tipo
carácter que corresponden a la marca, modelo, color, placas, transmisión y un entero
que será el número de pasajeros del automóvil. También se crea una función para
crear automóviles, en la cual se hace un tipo de dato automóvil y se le van pidiendo
los datos al usuario para guardarlos en los elementos de la estructura. La función
retorna un automóvil ya con sus datos de la estructura asignados.

c) Para la función de búsqueda de un elemento, se cambió la función de buscar para


que solo tome como parámetro la lista en la que buscará. Se hace un nodo con el
que se recorrerá la lista y se le pide al usuario que introduzca el color que desea
buscar. Entonces se entra a un ciclo que se repetirá mientras un contador sea menor
al tamaño total de la lista, y en cada repetición compara la cadena introducida con el
elemento color de la estructura del nodo en que este posicionada. Para esto
previamente se debió de haber creado una lista. La función imprimirá si se encuentra
el elemento e imprime el modelo del auto al que se refiere, además del número de
carros que tengan esta misma característica. En caso de que no encuentre el
elemento imprimirá ese mensaje.
d) Con base a la función ya existente para recorrer elementos, se agregó un menú en
donde se muestra la posición de la lista en que se encuentra e imprime un menú
donde se le da la opción al usuario de elegir lo que quiere ver, hay una opción para
cada uno de los elementos de la estructura automóvil, además de qué hay una
opción para pasar al siguiente elemento de la lista y una para dejar de recorrer la
lista. Todo está en un ciclo que se repetirá hasta que el usuario seleccione la opción
de salir y funciona con base a un switch-case.
Conclusiones:
Aprendimos como es que funcionan las listas ligadas simples y circulares, la manera en que
están constituidas y la manera en que se llevan a cabo sus operaciones. Los ejercicios
sirvieron para aprender a utilizar las funciones de manera adecuada, combinando incluso, el
uso de estructuras y sus definiciones, además de utilizar los archivos “.h”, aunque al principio
pueden ser complicados y en mi caso se me dificultó al no tener una representación visual de
lo que estaba haciendo a diferencia de los ejercicios que hemos llegado a hacer en las clases
de teoría.
A pesar de que solo fueron 2 actividades, y de que la guía no mostraba ningún ejemplo,
funcionan bien para entender de mejor manera el uso de listas ligadas y sobre todo de los
nodos, siendo la segunda actividad la que mejor ilustra el concepto y da una buena idea de
lo que se puede llegar a hacer con ellos.

También podría gustarte