CI2126 PRÁCTICA 6 Implementación de un TAD de manera dinámica. Se define el siguiente TAD y sus operaciones: Secuencia_t: Es una colección de elementos <e0, e1, e2, e3, ..., en-1>, con n>=0 y existe un elemento ei, llamado ventana, que es la posición visible de la Secuencia. Operaciones: Secuencia_Construir: void ­­> Secuencia_t /* Devuelve una secuencia vacía sin términos. La ventana queda indefinida */ Secuencia_Destruir: Secuencia_t ­> void /* Libera el espacio de memoria ocupado por la secuencia y sus términos */ Secuencia_Clonar: Secuencia_t ­> Secuencia_t /* Crea un duplicado elemento a elemento de toda la secuencia */ Secuencia_Insertar: Secuencia_t × Elem_t ­­> Secuencia_t ̣ /* Devuelve una secuencia con el elemento insertado en la posición siguiente a la ventana, y la ventana se mueve a este nuevo elemento */ Secuencia_Eliminar: Secuencia_t ­­> Secuencia_t ̣ /* Elimina el elemento actual de la ventana */ Secuencia_Comienzo: Secuencia_t ­­> void /* Regresa la ventana al primer elemento de la secuencia*/ Secuencia_AvanzarSiguiente: Secuencia_t ­­> void /* Avanza la ventana al elemento siguiente de la secuencia*/ Secuencia_Info: Secuencia_t ­­> Elem_t /* Devuelve la información del elemento visible en la ventana*/ Secuencia_Vacia: Secuencia_t ­­> bool /* Devuelve true si la secuencia está vacía */ Secuencia_AlFinal: Secuencia_t ­­> bool /* Devuelve true si la ventana es el último elemento de la secuencia */ Elem Secuencia primero info siguiente Lista info siguiente info siguiente Lista ventana Para implementar este TAD se sugiere usar la siguiente estructura, cuyos elementos a su vez están implementados como listas (Lista_t) de enteros (Elem_t ≡ int). Se le está ofreciendo un código de ayuda, separado por módulos en los TADs, es decir, un xxx.h y un xxx.c par acada TAD definido. Se suministran entonces (algunos incompletos, para que Ud. los use) : elem.h, elem.c, lista.h, lista.c, y secuencia.h, junto con un programa de prueba (prueba.c) sugerido. Preguntas: 1. Usando las primitivas del TAD Secuencia_t implemente las siguientes operaciones no primitivas: a) Secuencia_Ultimo: Secuencia_t ­­> void /* Mueve la ventana al último elemento de la secuencia */ b) Secuencia_Tamanyo: Secuencia_t ­­> int /* Devuelve el tamaño de la lista */ c) Secuencia_InsertarEnPos: Secuencia_t × int ­­> Secuencia_t /* Inserta un elemento en la posición dada */ d) Secuencia_Imprimir: Lista ­­> void /* Imprime el contenido de una lista */ e) Secuencia_Concatenar: Secuencia_t × Secuencia_t ­­> Secuencia_t /*Devuelve una secuencia con la concatenación de las dos secuencias dadas */ f) Secuencia_EliminarTodos: Secuencia_t × Elem_t ­­> Secuencia_t /* Elimina todas las ocurrencias del elemento en la secuencia*/ g) Secuencia_Ordenada: Secuencia_t ­­> bool /* Dice si una secuencia está ordenada. Suponga que existe una función Elem_esMenor que dice si un elemento es menor que otro.*/