Posso apprezzare lo sforzo, però se non riusciamo a mettere i tag code e indentare il codice nel forum, come pretendiamo di saper programmare? Programmare è anche essere ordinati. E il codice scritto così non ha nè testa nè coda!
Tornando alla domanda del thread, vuoi liberare la memoria relativa alla data. Ma dove allochi tu la data? Non allochi da nessuna parte, tu hai una lista di noti statici. Quindi così come hai scritto la lista non è possibile rimuovere la data se non mettendoci un valore fittizio.
Se vuoi allocare dinamicamente e avere la possibilità di liberare la memoria della data, allora la struct del nodo della lista deve essere questo:
typedef struct s_studente{
char nome[128],
char *data,
codice[10];
}t_studente;
Quando inserisci una data, devi allocare con una malloc, quando la vuoi cancellare, devi fare una free e mettere il puntatore a NULL.