ListeCandlisteCandNouv(void)/*Permet de créer un liste vide puis la retourne à la fonction appelante.*/
{
ListeCandlCand;
lCand=NULL;
returnlCand;
}
ListeCandinsererCandEntete(ListeCandlCand,Candidat*c)/*Permet d'insérer un MaillonCand en début d'une liste passée en paramètre puis renvoie cette même liste*/
{
MaillonCandidat*m;/* Création d'un pointeur vers une structure MaillonCand */
m=(MaillonCandidat*)malloc(sizeof(MaillonCandidat));/* Allocation d'un espace mémoire pour le nouveau maillon */
if(m==NULL)
{
printf("Problème d'allocation mémoire lors de l'insertion d'un candidat dans la liste d'admission\n");/* Message d'erreur en cas de problème de malloc */
exit(1);
}
m->c=c;/* Affecte le département passé en paramètre à l'attribut d du nouveau maillon */
m->suiv=lCand;
returnm;
}
ListeCandinsererCand(ListeCandlCand,Candidat*c)/* Permet d'insérer un maillon dans une liste donnée en paramètre dans l'ordre alphabétique/croissant et retourne cette liste */
{
if(lCand==NULL)/* Si la liste est vide, insère le nouveau maillon en tête */
{
returninsererCandEntete(lCand,c);
}
if(c->numeroC<lCand->c->numeroC)/* Si le numéro de candidat est inférieur à celui de la liste testé, le maillon est inséré en tête*/
{
returninsererCandEntete(lCand,c);
}
if(c->numeroC==lCand->c->numeroC)/* Si le maillon existe déjà, retourne la liste sans changement */
{
printf("Candidat déjà présent dans la liste\n");
returnlCand;
}
lCand->suiv=insererCand(lCand->suiv,c);/* Si aucun cas précédent n'est respecté, recommence avec le maillon suivant de la liste */
returnlCand;
}
ListeCandsupprimerCandEntete(ListeCandlCand)/* Permet de supprimer un maillon en tête de la liste donnée en paramètre et retourne cette liste */
{
ListeCandaux;
if(lCand==NULL)/* Si la liste est vide, quitte le programme car cela provoquerait une erreur */
{
printf("Opération interdite\n");
exit(1);
}
aux=lCand;/* On affecte l'adresse de la liste actuelle à une variable temporaire */
lCand=lCand->suiv;/* On supprime le maillon */
free(aux);/* On libère l'espace mémoire du maillon supprimer*/
returnlCand;
}
ListeCandsupprimerCand(ListeCandlCand,Candidat*c)/* Permet de supprimer un maillon d'une liste lDept passée en paramètre à partir de son attribut nom de département (dept) et retourne cette liste */
{
if(lCand==NULL)/* La liste est vide, on la retourne sans changements */
{
returnlCand;
}
if(c->numeroC<lCand->c->numeroC)/* Le maillon à supprimer n'existe pas, on retourne la liste sans changement */
{
returnlCand;
}
if(c->numeroC==lCand->c->numeroC)/* Le maillon à supprimer est trouvé, on le supprime */
{
returnsupprimerCandEntete(lCand);
}
lCand->suiv=supprimerCand(lCand->suiv,c);/* Aucune des conditions précédentes n'a été respectée, on recommence avec le maillon suivant */
returnlCand;
}
intlongueurListe(ListeCandlCand)/* Permet d'obtenir la longueur d'une liste passée en paramètre et retourne le nombre de maillons */
{
intcompt=0;/* On déclare un compteur pour compter le nombre de maillons */
while(lCand!=NULL)/* Tant que la liste n'est pas vide, on incrémente le compteur de 1 et on passe au maillon suivant */
{
compt=compt+1;
lCand=lCand->suiv;
}
returncompt;
}
boolvideListe(ListeCandlCand)/* Permet de savoir si une liste est vide et retourne un booléen */
{
if(lCand==NULL)
returntrue;
returnfalse;
}
ListeCandrechercherCandListe(ListeCandlCand,intnumeroC,int*trouve)/* Permet de recherche un maillon dans une liste de départements passée en paramètre pour ensuite renvoyer son adresse*/
{
if(videListe(lCand))/* Si la liste est vide, la variable trouve passée en pointeur prend la valeur 0 et on retourne la liste */
{
*trouve=0;
returnlCand;
}
if(numeroC<lCand->c->numeroC)/* Même procédé que la condition précédente si le département recherché n'est pas trouvé*/
{
*trouve=0;
returnlCand;
}
if(numeroC==lCand->c->numeroC)/* Si le département recherché est trouvé, trouve prend la valeur 1 et on retourne la liste */
{
*trouve=1;
returnlCand;
}
returnrechercherCandListe(lCand->suiv,numeroC,trouve);/* Si aucune condition n'est respectée, renvoie la même recherche pour le maillon suivant */