PRÁCTICA Nş 6: 2 sesiones
(del 30 de Abril al 11 de Mayo de 2001)
Estructuras de datos lineales. Listas (con punto de interés): Representación estática y dinámica
0. Objetivo
El objetivo de esta práctica es la realización de dos clases en C++ que implementen el tipo abstracto de datos LISTA con punto de interés (estática y dinámica), así como su utilización en un programa para la ‘gestión’ de alumnos matriculados.
1. EL tipo Abstracto de Datos LISTA
Las Listas con punto de interés son estructuras lineales generales, en las que dentro del conjunto de elementos, existe uno destacado, al que denominaremos punto de interés, y que será la referencia para todas las operaciones que se realicen en la lista.
Las operaciones de las que consta el TAD LISTA con punto de interés, tal y como vimos en clase, pueden ser las siguientes
INICIAR_LISTA ( ) ® Lista
Inicia la lista a vacía, con solo el punto ‘final de la lista’ y el punto de interés sobre este ‘final de la lista’
INSERTAR ( Lista , Valor ) ® Lista
Inserta el Valor delante del elemento señalado como punto de interés, dejando el punto de interés sobre el elemento en el que estaba.
ELIMINAR ( Lista ) ® Lista
Modifica la lista eliminando el elemento señalado por el punto de interés, dejando el punto de interés sobre el elemento siguiente al eliminado. Si el punto de interés señalaba el final de la lista devolverá error.
CONSULTAR ( Lista ) ® Valor
Devuelve la información señalada por el punto de interés. Si el punto de interés señalaba el final de la lista devolverá error.
LISTA_VACIA ( Lista ) ® Lógico
Nos informa si existe información en la lista o no (nos dice si el número de elementos de la lista es cero o diferente de cero.)
IR_A_INICIO ( Lista ) ® Lista
Mueve el punto de interés al primer elemento de la lista.
AVANZAR ( Lista ) ® Lista
Avanza el punto de interés al siguiente elemento de la lista.
FINAL_LISTA ( Lista ) ® Lógico
Nos dice si el punto de interés está o no al final de la lista.
2. IMPLEMENTACIÓN DE LAS CLASES: LISTA estática y dinámica
Se trata de implementar dos clases en C++ que implementen el tipo abstracto de datos Lista con punto de interés, de forma estática (vector sin cursores) y dinámica (punteros.) Ambas clases tendrán el mismo nombre, de forma que después pueda ser utilizada una clase u otra en el programa principal, sin necesidad de cambio alguno en el código.
Los métodos de la clase Lista, tanto en el caso estático, como en el dinámico, serán:
class Lista
{
public:
Lista (void);
Lista (const Lista &); /* Constructor de copia */
~Lista (void); /* Destructor de clase */
bool Insertar (Valor x);
bool Eliminar (void);
bool Consulta (Valor & x);
bool ListaVacia (void);
void IrAInicio (void);
bool Avanzar (void);
bool FinalLista (void);
private:
????
};
Si se cree conveniente, y solo para efectos de depuración del programa podría implementarse un método que mostrase todo el contenido de la lista sin modificar el punto de interés, e indicando la situación de éste.
Diseñar y realizar un programa que permita visualizar una base de datos de alumnos almacenada en un fichero. Este fichero es de tipo texto (por ejemplo este) y cada una de sus líneas contiene información de la matrícula de un alumno en un módulo de la carrera, de acuerdo al formato:
Código_Módulo Apellidos, Nombre
Ejemplo:
9999 Pérez Pérez, Pedro
En cualquier caso, se proporcionará un fichero de datos de prueba para la realización de la práctica, que tendrá que ser consultado para comprobar exactamente los detalles de formato. Téngase presente que cada alumno puede estar matriculado en varios módulos y puede por tanto aparecer en varias líneas del fichero.
El programa deberá tener un menú (sólo uno!) de cinco opciones:
1.- Cargar el fichero en una lista. El nombre del fichero lo indica el usuario, en ningún caso debe ser una información incluida en el código del programa.
2.- Buscar por apellidos y nombre, mostrando el código de todas las asignaturas en las que está matriculado un alumno.
3.- Buscar por módulo, mostrando la lista de alumnos matriculados en un módulo.
4.- Listar alfabéticamente por apellidos, indicando todos los módulos en los que está matriculado cada alumno. Este listado debe proporcionar una única línea de información por alumno.
5.- Salir.
Evidentemente habrá que controlar los errores. Por ejemplo, no se podrá consultar la base de datos si no se ha cargado un fichero en la lista.
4. Entrega de programas
Al inicio de la sesión de prácticas correspondiente a la semana del 14 al 18 de mayo se entregarán al profesor los archivos ‘list_v.h’, ‘list_v.cpp’, ‘list_p.h’, ‘list_p.cpp’ correspondientes al TAD lista con vectores y con punteros, y el programa principal ‘matric.cpp’.