Les structures D1 et D2 contiennent des pointeurs car la solution du problème a été défini ainsi.
Au départ j'avais pensé à une fonction du type
//fonction d'ajout d'un fait dans la liste
/* void ajoutFait(F **tete, double val, D1 **date, D2 **lieu){
//déclaration des variables
F* cour;
cour=(F*) malloc(sizeof(F));
cour->temps = D1;
cour->lieu = D2;
strcpy(cour->val,val);
cour->suiv = *tete;
*tete = cour;
} */
Le problème est que cela ne fonctionne pas car il y a une erreur quelquepart (vu que je débute, je suis un peu bloqué).
Merci pour ton aide 
Autre petite précision, les structures D1 et D2 sont des listes permettant de modéliser les deux dimensions de la liste des faits. De façon plus pratique, on pourrait penser à un tableau à deux dimensions pour traiter les faits.