Tarea 1 CC31A


Plazo: 1 semana

Descripción

Hacer funciones en C que permitan manejar una lista enlazada simple, donde se agregan valores por un extremo y se obtienen por el otro, de forma de mantener orden FIFO (First In First Out). La lista es una implementación general de una lista de punteros a cualquier cosa.

La interfaz a implementar (lista.h) es

/*
 * Lista simplemente enlazada para implementar una cola FIFO
 */

/*
 * Estructura interna de los nodos de la lista
 */
struct nodo {
    struct nodo *next; /* Enlace al siguiente */
    void *val;         /* Puntero generico al valor almacenado */
};

/*
 * Cabeza de lista con los punteros a la cabeza (h) y cola (t)
 * h apunta al primer elemento de la lista (el que le toca salir)
 * t apunta al ultimo (el que acaba de llegar)
 */
typedef struct {
	struct nodo *t, *h;
} LISTA;

/* Inicializa la lista */
LISTA *init_l();

/* Agrega un elemento */
void add_l(LISTA *, void *);

/* Extrae un elemento */
void *extract_l(LISTA *);

/* Retorna el numero de elementos almacenados */
int size_l(LISTA *);

/* Retorna el elemento más nuevo de la lista */
void *tail_l(LISTA *);

/* Retorna el elemento más viejo de la lista */
void *head_l(LISTA *);

Deben definir el tipo LISTA y la estructura "nodo" e implementar todas estas funciones.

Ejemplo de Uso

Se les provee el programa testlista.c que llama a las funciones con varios argumentos. Requieren crear el archivo de declaración de la interfaz lista.h. La salida exacta que debieran obtener está en el archivo outlista.txt para que la comparen.

Condiciones de Entrega

La tarea debe entregarse antes del plazo final a través de U-cursos y debe compilar sin errores y ejecutar, o no será evaluada. Si tienen una tarea que funciona en parte, pero no completa, entréguenla a tiempo y obtendrán algo de nota.