Vista previa del material en texto
Tabla Hash Mtro: Ortega Sanchez Noe Estructura de datos II Medina Guerrero Manuel Fernando Objetivo: Agregar información en una tabla hash resolviendo las colisiones de manera que se logre insertar todo lo que el usuario desee a pesar de ser repetido. Desarrollo: El funcionamiento de mi programa, es mediante una Tabla Hash, la cual trabaja por medio de una lista de pares, la cual almacena los índices y el contenido de estos, que son Videojuegos, así lo he manejado con mi clase objeto. Mi programa consta de 6 funciones para operarlo, las cuales son: 1) Insertar Videojuego 2) Eliminar Videojuego 3) Buscar Videojuego 4) Mostrar Tabla (contenido) 5) Guardar los datos 6) Cargar los datos 7) Salir Con estos métodos se lleva a cabo el buen funcionamiento de mi programa de manera que se podría decir que funciona correctamente, las colisiones las resuelvo con saturación progresiva agregando llaves iguales debajo de la original para no reemplazar valores o moverlos, esto hace más fácil la manipulación de los datos en caso de tener misma llave pero distinto contenido, resulta ser efectivo también al momento de cargar los datos ya que llamo a la función de insertar Videojuego en el cargar y a partir de esto dejar los datos tal cual fueron ingresados, mi clase objeto toma un cuarto parámetro el cual nos funciona para insertar los Videojuegos dependiendo de ese código, en mi contexto de llame el código de barras, este almacena un tipo de dato entero, y ese dato se le manda directo a la función de insertar Videojuego en su parámetro. Con la función Hash inserto dependiendo la llave, ya que a está se le saca el módulo con el número constante que se le otorga a la Tabla desde un inicio, de está manera encontraremos la posición de los elementos al llamar la función de Mostrar Tabla. A continuación adjunto las pruebas realizadas para validar el buen funcionamiento de mi programa. Ejecute el programa y agregue 5 Videojuegos: Ahora mostrare la tabla, visualizando el contenido de está : Ahora procederé a guardar mis datos y cerrar la ejecución, anexo evidencia de la ejecución y del txt generado por la función , posteriormente explico la estrategia utilizada para esto: Txt generado por la su función: Aquí guardo los datos que se vean un poco más ordenados que en los programas pasados, en los cuales toda la información la almacena en toda una línea, ahora podemos aprovechar el .txt en cuanto a visualización. La estrategia para guardar los datos fue la siguiente: Esto fue a partir de que use la lista que tenía, para poder de ahí, guardar dato por dato, lo cual hace que se escriba la información, de acuerdo a su llave, el iterador no es manual es a base de uno por uno cómo se van insertando. Este guarda de manera correcta la información con sus debidos delimitadores. El for que se usa en la función es para recorrer la lista y ya sabiendo como está ese rollo, ya solo programas pana. Y para llevarme la laptop está canijo, así que pensamos en soluciones un poco más reducidas. Es sumamente sencilla la implementación del programa, porque así ya no tendrías que crear más clases distintas. Mi función de guardar ha sido muy satisfactoria ya que no es mover el código más que a lo que se debe, eres un grande. Ahora voy a volver a correr mi programa, verificando que la tabla está vacía, y recuperando los datos almacenados en el .txt: Ahora voy a mostrar de Nuevo los datos para corroborar si estos se cargaron sin ninguna modificación: Ahora voy a explicar como funciona: void Hash::Cargar() { ifstream archivo("File04.txt", ios::out); if(archivo.is_open()) { string provisional; int llave; Juegos j; while(true) { getline(archivo, provisional, '|'); if(archivo.eof()) { break; } llave = stoi(provisional); j.set_llave(llave); getline(archivo, provisional, '|'); j.set_nombre(provisional); getline(archivo, provisional, '|'); j.set_personaje_principal(provisional); getline(archivo, provisional, '*'); j.set_empresa(provisional); insertar(j.get_llave(), j); } } else { cout << "No se pudo acceder al archivo" << endl; } archivo.close(); } Está es mi estrategia, por medio de getlines leer línea por línea en el archivo, leer los datos de manera que los va recuperando e insertando al mismo tiempo, esto haciendo más eficiente el funcionamiento de mi programa, la verdad no me tomó mucho tiempo para el cargar y guardar. De está forma me funciona bien sin fallas de compilación y de ejecución, y lo más importante recupera la información la cual la respaldé de manera correcta sin alterar el orden. Está función también manda llamar a la funciónash, la cual evalúa la llave al momento de insertarla. Esto provocando que utilice una posición dada a partir de la función Hash. Para demostrar que los datos pueden seguir siendo manipulables, utilice las otras funciones en el programa: Busqué un Videojuego mediante su llave: Ahora voy a eliminar un Videojuego a base de su llave: Verificaré que se haya eliminado correctamente mostrando la Tabla: Ahora insertaré un Videojuego con una misma llave de otro que ya haya insertado previamente: Tienen la misma llave pero distinto contenido, entonces funciona correctamente. (Esto mediante Saturación Progresiva). Comentarios y Conclusiones: Para este programa use la Tabla Hash, algo que solo vi pura teoría pero nunca lo había implementado en código, resulta útil a la hora de trabajar con archivos ya que estos por lo regular manejan las características similares a lo explicado en la Tabla Hash, y también ocurren las colisiones las cuales a partir de un archivo con el mismo nombre siempre te da como primera opción remplazar el archivo anterior con el nuevo. Es de mucha utilidad conocer este tipo de algoritmos porque desarrolla más nuestra habilidad de ser autodidactas y encontrar soluciones a los problemas. Estuvo muy sencillo este programa, lo único tedioso fue descubrir cómo resolver lo de las colisiones, pero lo demás todo bien. Mi programa cumple con su funcionamiento y genera un txt de manera más ordenada y no toda la información en un mismo renglón. Esto al darle un salto de línea después de guardar el primero, entonces conservan los campos y registros pero en una visualización distinta. Use las librerías de list, está me facilitó el poder hacer mi lista de pares la cual se compone de una lista de enteros las cuales son las llaves y los Videojuegos que es de la clase de mi objeto con sus tres atributos, la mia tiene cuatro ya que el cuarto me ayuda a insertar dependiendo del código de barras que hay ingresado el usuario. Y también utilice la librería de fstream, esto para poder manipular mi archivo al momento de querer guardarlo y recuperarlo, estuvo bueno el programa de Tablas Hash.