Un programa en C necesita manipular un conjunto de palabras. Se nos encarga la tarea de implementar esta funcionalidad y para ello se nos ofrece la siguiente descripción de requisitos:
La aplicación puede manipular varios conjuntos separados de palabras.
El orden y la forma en que se almacenan las palabras en la estructura de datos no es relevante para el resto de la aplicación.
Las operaciones que se deben soportar son:
Obtener un conjunto vacío.
Dada una palabra, obtener un conjunto con esa única palabra.
Dado un conjunto y una palabra, obtener el nuevo conjunto que contenga la palabra dada.
Dado un conjunto y una palabra, devolver un conjunto que no contenga la palabra dada. Si la palabra no existe, el conjunto no se modifica
Destruir un conjunto de palabras dado.
Todas las operaciones que reciben una palabra y la
almacenan, deben crear un duplicado con la llamada al sistema
strdup
. Esta función recibe una cadena de tipo char
*
terminada por un byte igual a cero y devuelve una cadena (de
tipo char *
) que es un duplicado del parámetro en una
porción de memoria reservada con malloc
.
La solución propuesta debe ser compacta, es decir, tener un uso de memoria lo más reducido posible.
En grupos de cuatro personas, discutir durante cinco minutos la estructura de datos que se propone para manipular estos conjuntos de cadenas de texto. Escribir su definición en C. Comentar la solución propuesta con el resto de la clase. Derivar una propuesta final sobre la que trabajarán todos los grupos.
El equipo propone una implementación de la función que devuelve un conjunto vacío y la que devuelve un conjunto con una única palabra. Comprobar la solución propuesta con el profesor.
El equipo propone una implementación para la función que inserta una palabra en un conjunto. Prestar especial atención al tipo de datos que debe devolver esta función.
Escribir las definiciones de las cabeceras de las dos funciones restantes (la que borra un elemento y la que destruye un conjunto).
Supongamos que ya tenemos escritas todas las funciones, ahora el resto de la aplicación las quiere usar, pero tal y como se incluye en la especificación, no se requiere saber cómo están almacenados los datos internamente. ¿Cómo organizarías el código y las definiciones para conseguir esto?
Implementar una de las dos funciones restantes.