Logo Studenta

reporte01-Zaragoza Jimenez Moises de Jesus

¡Este material tiene más páginas!

Vista previa del material en texto

UNIVERSIDAD DE GUADALAJARA 
CENTRO UNIVESITARIO DE CIENCIAS 
EXACTAS E INGENIERIAS 
REPORTE 01: 
“Lista Simplemente 
Ligada” 
MATERIA Y SECCIÒN: Estructuras de Datos II D01 
PROFESOR: Noé Ortega Sánchez 
ALUMNO: Moisés de Jesús Zaragoza Jiménez 
CÒDIGO: 213744319 
CARRERA: INNI 
 
 
 PROGRAMA 1: LISTA SIMPLEMENTE LIGADA 
En esta ocasión como primer programa tocó implementar una lista simplemente 
ligada, recordemos que este TDA se basa principalmente en el almacenamiento de 
datos contiguamente ligados, es decir, uno después de otro, sabiendo que cada 
dato tiene acceso a la dirección del siguiente dato, comenzando por un ancla y 
terminando con un apuntador a nulo. 
En esta ocasión opté por codiciar mis nodos a partir de apuntadores inteligentes, 
estos punteros se caracterizan por optimizar código y recursos ya que tienen la 
capacidad de liberarse de la memoria dinámica automáticamente al detectar que no 
son apuntados por nadie. 
También cabe mencionar que codifiqué mi lista a partir de templates o de plantillas 
lo que me facilita y garantiza que puedo usar cualquier tipo de dato, inclusive puedo 
usar objetos, como lo requiere este programa en donde me decidí por manejar una 
lista de vehiculos. 
A continuación, mostraré una breve descripción de cada parte que conforma mi 
actividad y terminaré con las capturas de funcionamiento. 
 
 CLASE NODO 
 
Mi clase nodo la anidé dentro de mi clase lista en el apartado privado, mi clase nodo 
cuenta con un campo para dato, y ya que hablamos de una lista simplemente ligada 
también cuenta con su apuntador a siguiente, como mencionaba en la introducción 
me basé en utilizar apuntadores inteligentes para la optimización de recursos. 
También cuenta con su constructor en donde me aseguro de que el nodo se 
encuentre vacío y listo para utilizarse, apuntando el ancla a nulo, dejando listo el 
campo de dato para un elemento y apuntando el siguiente al ancla. 
 
 
 
 CLASE LISTA 
 
En mi clase lista declaro todos mis métodos de operaciones que puede realizar una 
lista, comenzando por el constructor que me ayuda a dejar preparada la lista para 
utilizarse, asegurándose de que está vacío, seguido de su destructor que me ayuda 
llamando al método de borrar todo que veremos a continuación, en seguida declaro 
de forma pública todos mis métodos de operaciones que van desde saber si mi lista 
está vacía, saber el tamaño de elementos que contiene, agregar, eliminar, obtener 
primer y último elemento, borrar todo, etc.. que veremos cada uno de ellos a 
continuación. 
 
 
 
 
 VACIA 
 
Si el tamaño de mi lista es igual a 0 regresamos un booleano que indica que en 
efecto, la lista se encuentra vacía. 
 SIZE 
 
Devuelve el valor de un contador que aumenta 1 cada que se agrega un elemento 
a la lista y disminuye 1 cada que un elemento es eliminado. 
 AGREGAR INICIO 
 
Revisamos si la lista se encuentra vacía, si es así nuestro primer elemento también 
será el último, si la lista ya cuenta con posiciones creamos un nuevo nodo al que 
asignaremos el elemento recibido, después haremos que el ancla apunte a este en 
la posición en donde se encontraba el primer nodo originalmente. 
Aumentamos en 1 el contador de elementos de la lista. 
 AGREGAR FINAL 
 
Revisamos si la lista se encuentra vacía, si es el caso creamos el nodo con el 
elemento y el ultimo nodo también sería el primero, si no se encuentra vacía 
colocamos este nuevo nodo con el elemento recibido en la posición siguiente del 
ultimo nodo original, aumentamos nuestro contador de elementos. 
 OBTENER PRIMER ELEMENTO 
 
Validamos que la lista no se encuentra vacía y regresamos el dato del primer nodo. 
 
 
 
 
 
 OBTENER ULTIMO ELEMENTO 
 
Validamos que la lista no se encuentre vacía y regresamos el dato del último nodo. 
 ELIMINAR PRIMERO 
 
Primero revisamos si la lista se encuentra vacía, en ese caso no es posible hacer 
una eliminación, después verificamos si la lista solo cuenta con un elemento, si es 
así el primero y el último apuntarán a nulo, sino solamente apuntamos el primero al 
siguiente del que era el primero, los punteros inteligentes nos ayudan a liberar este 
espacio de memoria automáticamente, disminuimos el contador de elementos. 
 
 
 
 
 ELIMINAR ULTIMO 
 
Primero revisamos si la lista se encuentra vacía, en ese caso no es posible hacer 
una eliminación, después verificamos si la lista solo cuenta con un elemento, si es 
así el primero y el último apuntarán a nulo, sino crearemos un nodo auxiliar que 
comience en el primer nodo y vaya avanzando al siguiente hasta que sea el 
penúltimo, cuando sabemos que nuestro auxiliar se encuentra en el penúltimo nodo 
solo eliminamos el siguiente del auxilia e igualamos como nuevo ultimo a este 
auxiliar, los punteros inteligentes nos ayudan a liberar este espacio de memoria 
automáticamente, disminuimos el contador de elementos. 
 
 
 
 
 
 
 
 
 AGREGAR EN POSICION EN ESPECIFICO 
 
Recibimos una posición y en elemento, si la posición es mayor al tamaño de la lista 
o la lista se encuentra vacía no podremos agregar el elemento, si la posición es 
igual a 0 solo hacemos un agregar a inicio el elemento recibido, si la posición es 
igual al tamaño de la lista solo hacemos un agregar final, si la posición se encuentra 
dentro del tamaño de la lista creamos un nodo auxiliar que nos ayude con un 
recorrido y en donde se encuentre la posición ahí insertaremos este nodo auxiliar 
con el elemento recibido, aumentamos contador de elementos. 
 
 
 
 
 
 ELIMINAR POSICION 
 
Recibimos una posición, si la posición es mayor al tamaño de la lista o la lista se 
encuentra vacía no podremos eliminar el nodo, si la posición es igual a 0 solo 
hacemos un eliminar primero, si la posición es igual al tamaño de la lista solo 
hacemos un eliminar final, si la posición se encuentra dentro del tamaño de la lista 
creamos un nodo auxiliar que nos ayude con un recorrido y en donde se encuentre 
la posición ahí eliminaremos este nodo auxiliar, disminuimos el contador de 
elementos. 
 
 
 
 
 
 ELIMINAR TODA LA LISTA 
 
Solamente hacemos un eliminar inicio, los punteros inteligentes nos ayudaràn a 
liberar todo el espacio de memoria utilizado por nuestra lista, el primero y ultimo 
apuntarían de nuevo a nulo y nuestro contador sería igual a 0. 
 CLASE VEHICULO 
 
 
Tenemos nuestra clase de Vehiculo que serà la encargada de llenar el campo de 
elemento o de dato de nuestros nodos, esta clase cuenta con sus 3 atributos que 
son el Model del auto, el año y el color, cuenta con sus getters y setters y añadì 2 
sobrecarga de operadores, el ostream que nos ayuda a imprimir con >> y el istream 
que nos ayudarà a cargar los datos cada que queramos insertar un nuevo elemento 
tan solo con >>. 
Posteriormente mostrarè una clase administradora en donde manipule mis mètodos 
de lista con mis atributos y mètodos de mi clase de elementos, es decir, mi clase de 
los vehiculos. 
El setw nos ayudarà a imprimir con una separaciòn entre cada campo pareciendo 
una especie de tabla ayudàndonos a tener una mejor organizaciòn. 
 CLASE AGENCIA 
 
Esta agencia serà mi clase administradora o mi clase puente que conectarà los 
mètodos de mi lista con los atributos y mètodos de mi elemento Vehiculo, creando 
en mi apartado de atributos una Lista de objetos Vehiculo llamada vehiculos, 
ademàs de que a partir de aquì agregarè 2 nuevas operaciones, cargar y guardar 
archivos, utilizarè una sobrecarga de operadores para insertar que me serà de 
mucha ayuda en mi operaciòn de guardar, a continuaciòn explicarè còmo funcionarà 
cada uno de sus mètodos. 
Implementando un menu de operaciones en el misma clase agencia, para hacer uso 
de cada una de las acciones de la lista. 
 AGREGAR INICIO Y FINAL 
 
Por parte del usuario recibiremos un Vehiculo y mandamos a llamar nuestro mètodo 
de agregar inicioo final. 
 AGREGAR EN POSICION 
 
Recibiremos del usuario una posicion y un Vehiculo, revisamos el estado de la lista 
para asegurar que nuestro Vehiculo serà insertado en la posiciòn correcta. 
 
 
 
 
 
 
 
 
 ELIMINAR PRIMERO Y ELIMINAR FINAL 
 
Solamente revisaremos si nuestra lista se encuentra o no vacía y mandaremos a 
llamar el método de eliminar inicio o eliminar final, depende el caso. 
 ELIMINAR EN POSICION 
 
Recibimos del usuario una posición, revisamos si la lista no se encuentra vacía y si 
la posición recibida no sobrepasa el rango de la lista y mandamos a llamar el método 
de eliminar por posición mandando la posición recibida por el usuario. 
 
 BORRAR TODO 
 
Revisamos si la lista no se encuentra vacía y mandamos a llamar el método de 
eliminar toda la lista. 
 OBTENER PRIMERO O ULTIMO 
 
Revisamos si la lista no se encuentra vacía, con el setw nos ayudarà a mostrar el 
elemento en tipo tabla, nos ayuda a organizar los datos, y ahora sí mandamos a 
llamar el método de obtener el primero o último dependiendo el caso que haya 
seleccionado el usuario 
 TAMAÑO DE LA LISTA 
 
Retorna el valor del contador que lleva el método size de nuestra lista. 
 MOSTRAR LISTA(IMPRIMIR) 
 
Con ayuda del set crearemos un encabezado de tipo tabla, después crearemos un 
recorrido de toda nuestra lista en donde con la ayuda de nuestra sobrecarga de 
operador << imprimiremos el elemento de cada posición hasta completar toda 
nuestra lista. 
 
 
 
 
 
 MENU DE OPCIONES 
 
 
 
 
 
 
 
En la misma clase agencia hice el menú de operaciones para hacer uso de todas 
las acciones de la lista, ya solo en el main lo llamo, creando un objeto agencia a, y 
vehículo v, usando switch case. 
 
 METODO GUARDAR 
 
La estrategia que utilicé para codificar mi método de guardar fue primeramente 
con mi palabra reservada ofstream que nos ayuda a crear un archivo, en este caso 
un .txt al que nombramos file01.txt tal como lo pide la actividad, después con una 
condición evaluamos si el archivo se pudo abrir, es decir, se pudo crear 
correctamente, entonces hacemos un recorrido del tamaño de nuestra lista, 
creando un objeto de tipo Vehículo que se copie al elemento que estamos 
recorriendo, con nuestra sobrecarga de operador << iremos extrayendo atributo 
por atributo de nuestro Vehículo, cuidando siempre utilizar “|” para delimitar 
nuestros campos y “*” para delimitar nuestro registro y podamos seguir a la 
siguiente posición, como buena práctica de programación al final cerraremos el 
archivo indicando que hemos terminado el guardado 
 
 
 
 
 
 
 
 
 
 
 METODO CARGAR 
 
Con la ayuda de nuestra palabra reservada ifstream nos ayudarà a abrir archivos, 
en este caso el file01.txt, primero revisamos si el archivo pudo ser abierto 
correctamente, en ese caso comenzaremos creando un objeto de tipo Vehiculo para 
almacenar los atributos que vayamos leyendo y una variable temporal string que 
nos ayudará como un auxiliar para guardar los datos leídos, con nuestro getline 
iremos leyendo línea por línea en el orden en que las guardamos, comenzando por 
modelo, siguiendo por año y terminando por color, con la ayuda de nuestros setters 
de nuestra clase Vehiculo iremos almacenando los datos leídos hasta llegar al 
delimitador, con el “stoi” nos ayuda a convertir el string leído en el archivo a un 
entero para poder almacenarlo en nuestro setter, una vez obtenidos los 3 atributos 
con un agregar final mandamos el objeto en donde cargamos lo leído, al final como 
buena práctica de programación cerraremos el archivo abierto. 
 MAIN 
 
Ya únicamente en main creo un objetos tipo agencia y mando llamar el menú 
creado en la misma agencia. 
 
CAPTURAS DE FUNCIONAMIENTO 
 
 
Trabajaremos nuestra lista a partir de 
este menú de operaciones 
Agregué algunos elementos a nuestra 
lista para mostrar el correcto 
funcionamiento de las operaciones 
ahora sí. Podemos observar como 
nuestra lista se organiza como si 
fuese una tabla gracias al setw 
 
 
 Agregar al Inicio 
Agregamos el Vehiculo “sentra” al 
inicio y vemos como la lista se 
actualiza de forma correcta. 
 
 
 Agregar al Final 
Agregamos el Vehiculo “fit” al final 
y vemos como la lista se actualiza 
de forma correcta. 
 
 
 Agregar en 
posición 
Agregamos el vehiculo 
“yaris” en la posición 3 
de nuestra lista y vemos 
como se actualiza 
correctamente 
 
 Obtener Primero 
Obtenemos el primer 
elemento de nuestra lista, que 
es “sentra” 
 
 
 
 Obtener Ultimo 
Obtenemos el último 
elemento de nuestra lista, que 
es “fit” 
 
 
 Eliminar Primero 
Eliminamos el primer 
elemento de nuestra lista que 
correspondía a “sentra” 
 Eliminar Ultimo 
Eliminamos el último 
elemento de nuestra lista que 
correspondía a “fit” 
 
 
 
 
 
 
 
 
 
 Eliminar en Posición 
Pregunta qué posición desea 
eliminar y elegimos eliminar la 2 
que correspondía a “yaris” 
 
 
 
 Guardar Lista 
Guardamos los elementos con los 
que cuenta la lista en un archivo .txt 
llamado file01, cuidando de guardar 
con delimitadores de campo y de 
registros, anexo una captura del 
archivo creado 
 
 Cargar Lista 
Cerré mi compilador para volverlo a 
ejecutar y obtener una lista vacía, 
enseguida cargo archivo y obtengo 
los registros. 
 
 BIBLIOGRAFÌA 
¿Como guardar y cargar un árbol binario en un archivo? (2017, 16 noviembre). 
Stack Overflow en español. 
https://es.stackoverflow.com/questions/118012/como-guardar-y-cargar-un-arbol-
binario-en-un-archivos 
 
 Eliminar toda la lista 
Eliminamos todos los elementos 
de la lista y la dejamos vacìa

Continuar navegando

Materiales relacionados