Tabla de contenidos
Un programa en C necesita almacenar un número indeterminado de enteros. El tamaño de los datos no se sabe hasta que el programa está ejecutando. Para hacer un uso más óptimo de memoria se opta por representarlos mediante una lista encadenada. Cada elemento de esa lista es una estructura que contiene el número a almacenar y un puntero al siguiente elemento. Los elementos de la lista están, por tanto, encadenados. La siguiente figura muestra un ejemplo de esta estructura:
La lista se manipula en el programa únicamente mediante un puntero a su primer elemento. Escribe las siguientes porciones de código (necesitarás ayuda con alguna de ellas, con lo que esperamos que hagas uso del foro de la asignatura):
Define la estructura de datos necesaria. ¿Cómo representas una lista vacía?
Función que no recibe parámetros y devuelve una lista vacía (no debería tener más de una línea de código).
Función que, dado un entero, devuelve una lista con un único elemento con ese entero.
Función que, dada una lista y un entero, añade el entero a la lista (el lugar donde se añade el entero es irrelevante).
Función que devuelve el número los elementos de una lista.
Función que, dada una lista y un entero, borra todas las apariciones de ese entero (si hay alguna) en la lista.
Función que, dadas dos listas, devuelve una lista que es la concatenación de ambas.
Función que borra totalmente el contenido de una lista.
Escribe estas estructuras y funciones en un fichero con su
propia función main
e incluye en ella llamadas para verificar
que tu estructura de datos funciona correctamente.
Decide primero qué representación vas a tener de la lista y cómo vas a almacenar los elementos. Piensa si la estructura que propones es la adecuada para ser manipulada por las funciones que se piden.
Para cada función, primero piensa en su prototipo, esto es, el tipo de resultado y los tipos y número de parámetros necesarios. Una vez que tengas esto claro, diseña el cuerpo de la función.
Una vez hayas terminado la implementación de las
funciones, mueve la función main
a un fichero aparte. Crea
un fichero con extensión “*.h
” en el
que incluyas las definiciones y prototipos necesarios para que, al
incluirlo en el fichero del “main
”, se compile
sin advertencias.
Ahora, trabajaremos con la lista de alumnos de un curso (de tamaño variable) donde se guardará, para cada alumno, un nombre (de tamaño variable), sus notas (otra lista de tamaño variable) y su identificador de alumno (un entero).
Elija la definición de datos adecuada para guardar las notas de cada alumno.
Elija la definición de datos adecuada para la lista de alumnos.
Se desea inicializar en el programa principal la lista como vacía. Elija la correcta declaración.
Se desea implementar una función que, dado un identificador y un nombre de alumno, devuelva una lista con un único elemento con la lista de notas vacía. La función debe copiar el nombre del alumno. Elija el código correcto para dicha función.
Se desea llamar a la función anterior desde el programa principal. Elija el código correcto.
Se desea implementar una función que, dada una lista, un identificador y un nombre de alumno, modifique la lista añadiendo el nuevo alumno al final de la lista y devuelva la nueva longitud de la misma. Elija el prototipo correcto de dicha función.