From 66996be492b0f7a669fedfb02d9bd30223aeedc6 Mon Sep 17 00:00:00 2001 From: loris OBRY Date: Sat, 17 Dec 2022 17:57:09 +0100 Subject: [PATCH] liste.c : nouvelle fonction -ajouter --- liste.c | 31 +++++++++++++++++++++++++++++++ main.c | 6 +++--- sae.h | 1 + 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/liste.c b/liste.c index 340187d..ea18d28 100644 --- a/liste.c +++ b/liste.c @@ -14,20 +14,24 @@ ListeDept ajouterEnTete(ListeDept ldept, char nomDept[], char resp[], int nbP) { MaillonDept *m; + // Allocation de la memoire pour le nouveau maillon. m = (MaillonDept *)malloc(sizeof(MaillonDept)); if (!m) { printf("Erreur de malloc\n"); exit(1); } + // On ajoute le nom du departement, le nom du responsable ainsi que le nombre de places en 1ere année. strcpy(m->nomDept, nomDept); strcpy(m->resp, resp); m->nbP = nbP; if (vide(ldept)) { + // La liste est vide, alors m n'as pas de suiv: m->suiv = NULL; return m; } + // La liste n'est pas vide, on ajoute le maillon en tete de la nouvelle liste qu'on renvois. m->suiv = ldept; return m; } @@ -67,6 +71,33 @@ bool vide(ListeDept ldept) return true; return false; } + +/** + * \brief Ajoute un maillon à la liste de départements, en ordre alphabétique. + * + * \param ldept La liste de départements à laquelle le maillon doit être ajouté. + * \param nomDept Le nom du département à ajouter. + * \param resp Le responsable du département à ajouter. + * \param nbP Le nombre de personnes dans le département à ajouter. + * + * \return La nouvelle liste de départements, avec le maillon ajouté à la bonne position. + * + * Si la liste est vide, le maillon est ajouté en tête de la liste. + * Si la liste contient déjà des éléments, le maillon est ajouté en ordre alphabétique selon le nom du département. + */ +ListeDept ajouter(ListeDept ldept, char nomDept[], char resp[], int nbP) +{ + MaillonDept *temp; + + if (vide(ldept)) + return ajouterEnTete(ldept, nomDept, resp, nbP); + temp = ldept; + while (temp->suiv && strcmp(temp->suiv->nomDept, nomDept) < 0) + temp = temp->suiv; + temp->suiv = ajouterEnTete(temp->suiv, nomDept, resp, nbP); + return ldept; +} + /** * @brief Créer une nouvelle liste de départements vide. * diff --git a/main.c b/main.c index 052b82b..cb896fc 100644 --- a/main.c +++ b/main.c @@ -7,9 +7,9 @@ int main(void) ldept = listenouv(); - ldept = ajouterEnTete(ldept, "Informatique", "John Doe", 15); - ldept = ajouterEnTete(ldept, "Bio", "Ryan Taro", 20); + ldept = ajouterEnTete(ldept, "Informatique", "John Doe", 150); + ldept = ajouterEnTete(ldept, "Bio", "Ryan Taro", 200); afficherListe(ldept); - ldept = supprimerEnTete(ldept); + ajouter(ldept, "Chimie", "Henri Laserre", 80); afficherListe(ldept); } \ No newline at end of file diff --git a/sae.h b/sae.h index 6cd61fe..51a0c4b 100644 --- a/sae.h +++ b/sae.h @@ -19,6 +19,7 @@ typedef struct }VilleIut; // Liste.c +ListeDept ajouter(ListeDept ldept, char nomDept[], char resp[], int nbP); ListeDept ajouterEnTete(ListeDept ldept, char nomDept[], char resp[], int nbP); ListeDept supprimerEnTete(ListeDept ldept); ListeDept listenouv();