Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Centro Universitario de Ciencias Exactas e Ingenierías Ingeniería informática SEMINARIO DE SOLUCIÓN DE PROBLEMAS DE ESTRUCTURAS DE DATOS I Equipo 4 - Ruiz Estrada Montserrat - Sanchez De La Cruz Diego Oswaldo - Sanchez Gomez Edgardo Enrique - Sevilla Nungaray David - Valenciano Tadeo Jeremy Esau - Vázquez Bojórquez Ricardo David ● Listas estáticas Introducción Es un tipo de dato abstracto que almacena información, de manera continua, del mismo tipo de datos, los elementos dentro de la lista no necesariamente pueden estar ordenados. Los elementos de la lista pueden ser insertados en cualquier parte de la lista, así mismo, la eliminación de algún elemento de la lista puede efectuarse en cualquier parte de la misma, siempre y cuando se reasignen los elementos para cumplir con el almacenamiento continuo. Algunos de los métodos más comunes en las listas son: 1 1. Archivo main Comenzamos añadiendo la librería estándar <iostream> y el namespace std, después incluimos la librería menu.h la cual contendrá la declaración de nuestro objeto de tipo menú. 2. Función main Dentro de nuestra función main declararemos un objeto de tipo menú con el cual podremos mostrar todas las opciones que nuestro programa podrá realizar como lo son: Insertar, agregar, buscar, eliminar, vacía, llena, mostrar . Después con ayuda de un bucle podremos evaluar la opción que digite el usuario con nuestra función evaluateMenu(). 2 3. Archivo cabecera list.h Al inicio de nuestro archivo list.h contamos con la inclusión de la librería <iostream> así como de la librería string las cuales nos ayudaran con el manejo de datos de tipo string. Después incluiremos la cabecera error.h la cual será la encargada de mostrar los errores en caso de que se encuentren: insuficiencia de datos en nuestra lista o desbordamiento de datos en nuestra lista. Declaración de nuestra Lista 3 Atributos privados: Al declarar nuestra clase llamada List, incluiremos nuestros atributos de manera privada los cuales serán un arreglo de Strings llamado data con un tamaño máximo previamente definido. Después declararemos un contador y una variable llamada last la cual se encargará de guardar el índice del último elemento de nuestro arreglo de strings. Métodos públicos y constructores: Contaremos con 2 constructores uno parametrizado y otro constructor sin parámetros, después haremos una sobrecarga del operador de asignación el cual modificara el comportamiento de nuestro operador al momento de la asignación sólo entre datos de tipo lista. Algunos de nuestros métodos implementados en nuestra lista serán: ● isValidPos: verifica que la posición dada sea válida ● isEmpty: verifica si la lista está vacía ● isFull: verifica si la lista está llena ● insertData: inserta un elemento en la lista ● findData: encuentra un elemento en la lista y regresa su índice ● deleteData: elimina un elemento de lista ● retrieve: recupera la posición de un elemento ● deleteAll: borra la lista ● toString: es el encargado de imprimir los elementos de la lista de manera adecuada debido a que no podemos acceder directamente a ellos. Implementación de los métodos de la Lista. Métodos constructores: En la lista se encuentran dos métodos constructores y una sobrecarga del operador de asignación, en el constructor principal de la lista es en donde inicializamos los atributos cont y last, el atributo last se inicializa en -1 y el de cont en 0. 4 Después de este se encuentra un constructor copia, recibe un objeto de la lista como parámetro, y en este constructor se copiaran los datos que había en la lista dentro del objeto recibido como parámetro. Luego, se encuentra una sobrecarga del operador de asignación, este método recibe una cadena tipo string como parámetro, y esta se asignará en la lista en la posición de cont. Validaciones de la lista: En la lista se encuentran tres métodos de tipo booleano, uno de ellos servirá para verificar si la posición escogida por el usuario es una posición valida, para eso evaluará si la posición es mayor o igual a cero y si la posición es menor o igual a last, si esto es correcto, retorna verdadero y sino retorna falso. El segundo método de validación servirá para verificar si la lista está vacía, para esto se evaluará si last es igual a -1, y al igual que el anterior, si es cierto retorna verdadero y sino retorna falso. En el segundo y último método de validación, se verificara si la lista está llena, para esto se evaluará si last es igual al tamaño de la lista -1. 5 Implementación de las operaciones de la Lista. Operación de insertar: Este método sirve para insertar el nombre dentro de la lista, en la posición escogida por el usuario. El método recibe un parámetro de tipo entero para la posición y una cadena string para el nombre, lo primero que hay en el método es una validación que ayudará a verificar si la lista está llena, si esto sucede el programa ejecutará una excepción y pondrá un mensaje que diga que hay un desbordamiento de datos, sino sigue con lo siguiente, que es validar si la lista está vacía y si la posición dada por el usuario es válida, sino es válida se ejecutará una excepción que le dirá al usuario que la posición no es válida. Luego de estas evaluaciones, se declarara una variable de tipo entero i y se inicializará con el valor que tenga last, luego se pondrá una iteración while que continuará su recorrido mientras que la variable i sea mayor a la posición recibida, lo que pasa dentro de esta iteración es que se copiaran todos los datos de la lista de la posición i, dentro de la misma lista pero en la posición i+1, y se decrementará i hasta que se detenga la iteración. Una vez se detenga el proceso de copiado, se guardará el nombre dado por el usuario dentro de la lista en la posición escogida por el usuario y last se incrementará en 1. 6 Operación de encontrar: En la implementación de este método, tenemos que recibe una cadena string como parámetro, luego se declara una variable de tipo entero i, que se inicializará con un cero. Después, se pondrá una iteración while que seguirá su recorrido mientras que i sea menor o igual a last, dentro de esta iteración, se evaluará si alguno de los nombres dentro de la lista coinciden con el que se recibio como parámetro de parte del usuario, si esto se cumple, la posición que haya coincidido se retornará, sino se retornara -1, que significa que el nombre no se encuentre en la lista. Operación de eliminar: En la implementación de este método, tenemos que recibe un parámetro de tipo entero, que será una posición escogida por el usuario para eliminar. Primero se evalúa si la posición dada por el usuario es una posición válida, sino el válida se lanza una excepción que le dirá al usuario que la posición no es válida, sino a continuación se declara una variable de tipo entero i, y se inicializará con el valor de la posición escogida por el usuario, luego se pone una iteración while, que seguirá su recorrido mientras que i menor a last, dentro de esta iteración se hará un proceso de copia similar al de la operación de insertar, solo que en este caso los nombre que haya en la posición i+1 de la lista, se copiaran a la misma lista pero en la posición i. Una vez terminado el proceso de copiado, last se decrementa en 1. 7 Operación de recuperar: En la implementación de este método, tenemos que recibe un parámetro de tipo entero que será una posición escogida por el usuario, luego se evalúa si la posición escogida es una posición válida, si es inválida, se ejecutará una excepción y dará un mensaje de que la posición es invalida, pero si es válida, entonces se retorna el valor que haya dentro de la lista en la posición recibida como parámetro. 8 Operación de primera: Este método sirve para retornar la primera posición de la lista, la implementación de esta es bastante simple, ya que solo evalúa si la lista está vacía, si es verdadero, entonces se retornara que la primera posición es -1, sino entonces es 0. Operación de última: Este métodosirve para retornar la última posición de la lista, esta es incluso más simple que la anterior, ya que esta solo retorna el valor que haya en el atributo last. Operación de previa: Este método sirve para retornar una posición previa a la que escoja el usuario, para la implementación de este método, tenemos que recibe un parámetro de tipo entero para la posición escogida por el usuario, luego dentro de este metodo evaluara si la posición recibida es igual a la primera posición o si es una posición válida, si esto es cierto se retorna que la posición previa es -1, sino entonces se retorna el valor de la posición escogida -1, osea la posición previa. 9 Operación de siguiente: Este método sirve para retornar una posición posterior a la que escoja el usuario, la implementación de este método funciona igual al anterior, solo que en este caso sino se cumple con la primera evaluación, entonces retorna el valor de la posición escogida +1, osea la posición posterior a la escogida. Operación de borrar todo: La implementación de este método es simple, ya que lo único que hace es asignarle denuevo -1 a last. 10 Método toString: Este método es el que nos ayudará a darle un formato de impresión a los datos dentro de la lista, al momento de imprimirlos en pantalla. En la implementación de este método, primero se declara una cadena string que servirá para realizar el formato y concatenación de los datos y luego retornarse, luego se declarara una variable de tipo entero i, y se inicializará con un 0. A continuación, hay una iteración while que continuará su recorrido mientras que i sea menor o igual a last, dentro de esta iteración se realizará el proceso de concatenación, y una vez termine el proceso se retorna la cadena resultante. 11 4. Archivo cabecera menu.h Atributos privados: Dentro de nuestra clase Menu contamos con el atributo privado llamado myList que es de tipo List, el cual será el encargado de definir la estructura de nuestra lista, por otra parte tenemos un contador y finalmente una variable de tipo string la cual nos ayudará como variable auxiliar para nuestra Lista. Métodos públicos y constructores: Contaremos con 2 constructores uno parametrizado y otro constructor sin parámetros, después haremos una sobrecarga del operador de asignación el cual modificara el comportamiento de nuestro operador al momento de la asignación sólo entre datos de tipo Menú. 12 Algunos de nuestros métodos implementados en nuestra lista serán: ● captureData: Se encargará de capturar y almacenar el string que ingrese el usuario. ● showString: Será el encargado de mostrar todos los elementos de nuestra lista. ● findData: Este método buscará un elemento que digite el usuario en nuestra lista y retornara la posición en donde se encuentra. ● deleteAString: Este método será el encargado de eliminar un string dado por el usuario en nuestra lista, en caso de no coincidir con ninguno imprimirá un error. ● showMenu: será el encargado de desplegar el menú de nuestro programa así como de almacenar la opción que seleccione el usuario. ● evaluateMenu: este método será el encargado de evaluar la opción que digito el usuario para poder decidir qué función de las anteriores previamente explicadas ejecutar. 5. Archivo menu.cpp Métodos constructores: Se encuentran dos métodos constructores y una sobrecarga del operador de asignación, en el constructor principal de la lista es en donde inicializamos los atributos cont y j, en 1 y 0. Después de este se encuentra un constructor copia, recibe un objeto como parámetro, y en este constructor se copiaran los datos que había dentro del objeto 13 recibido como parámetro. Luego, se encuentra una sobrecarga del operador de asignación, el cual nos ayudara a modificar el comportamiento del operador de asignación solo en objetos de tipo Menu. Función Capturar String Esta función de tipo void llamada captureData es la encargada de Capturar un nuevo nombre para ser posteriormente agregado a la lista, con ayuda de la funcion getline, se encargará de guardar el nombre que el usuario Ingrese por medio del teclado en la variable auxiliar llamada myString; Función Capturar String a Buscar Esta función de tipo void llamada findData será la encargada de capturar el dato de tipo String que el usuario desea buscar en la lista, con ayuda de la función getline, se encargará de guardar el nombre que el usuario Ingrese por medio del teclado en la variable auxiliar llamada myString; 14 Función Capturar String a eliminar. Esta función de tipo void llamada deleteString será la encargada de capturar el dato tipo String que el usuario desea eliminar de la lista, con ayuda de la función getline guardara la palabra en la variable auxiliar myString para posteriormente realizar una búsqueda con el método findData en la lista y asignarle esa posición a la variable pos. Función Mostrar Lista de Strings Esta función de tipo void llamada showString es la encargada de mostrar toda la lista de Strings con ayuda del método retrieve, imprimirá en pantalla la lista de Strings mientras que nuestra variable i sea menor o igual a la última posición de la lista. 15 Función Mostrar Menú Esta función de tipo char llamada showMenu es la encargada de mostrar las opciones del menú al usuario para posteriormente capturar y guardarla en una variable de tipo char llamada op, el cual retornaremos para después poder definir el comportamiento de nuestra lista en el programa. Función Evaluar Menú 16 Declaración de Variables: Dentro de nuestra función llamada evaluateMenu encontraremos una variable de tipo char opc la cual será con la que evaluemos los cases de nuestra sentencia switch. Case Agregar a la lista En caso de seleccionar la opción de agregar a la lista en el menú, se entrará en un ciclo en el que se llame a la función “captureData” para añadir un nombre a la lista y se le preguntará al usuario si desea hacer otro registro. Si la opción elegida es sí, se repetirá el bucle, en caso contrario se acaba la función. Case Buscar en la lista Si se elige la opción B, el programa manda a llamar a “FindData”. Este mostrará el dato ingresado en la posición que se ubicó mediante una coincidencia. En caso de que no se encuentre y que la lista tenga nombres guardados, entonces se muestra un mensaje donde se indique que no hubo resultados. 17 Case Eliminar de la lista En caso de que se elija la opción de borrar de la lista, se llamará a la función “deleteAString”, la cual nos ayudará a capturar un string que el usuario desea eliminar, después de eso se ejecutará, si se cumple la condición de que el método “find data” sea diferente a 1, se busca el string ingresado que el usuario desea borrar. Si se encuentra alguna coincidencia, se imprimirá en pantalla que el string ha sido borrado exitosamente. En caso de que no se haya encontrado ningún string que coincida con el introducido por el usuario, se imprimirá en pantalla que no se encontraron coincidencias. Case Insertar a la lista En caso de que elija la opción D, se llamará a la función “CaptureData”. El usuario ingresará la posición donde deseé insertar el String. Al final de ingresar un String se preguntará si desea agregar otro String a la lista. 18 Case Mostrar de la lista Si se elige la opción E, se mandará a llamar la función “ShowString” la cual mostrará en pantalla todos los nombres almacenados en la lista. En caso de que no haya, no muestra nada. Case Eliminar todo. Si elige la opción F, el programa borrará todo el contenido almacenado en la lista. Case Salir. Si elige la opción g, el programa finalizara y en caso de no elegir la opción correcta se imprimirá un mensaje de error. 19 20
Compartir