liste.c : nouvelle fonction -ajouter

master
loris OBRY 2 years ago
parent 30a1e809af
commit 66996be492

@ -14,20 +14,24 @@ ListeDept ajouterEnTete(ListeDept ldept, char nomDept[], char resp[], int nbP)
{ {
MaillonDept *m; MaillonDept *m;
// Allocation de la memoire pour le nouveau maillon.
m = (MaillonDept *)malloc(sizeof(MaillonDept)); m = (MaillonDept *)malloc(sizeof(MaillonDept));
if (!m) if (!m)
{ {
printf("Erreur de malloc\n"); printf("Erreur de malloc\n");
exit(1); 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->nomDept, nomDept);
strcpy(m->resp, resp); strcpy(m->resp, resp);
m->nbP = nbP; m->nbP = nbP;
if (vide(ldept)) if (vide(ldept))
{ {
// La liste est vide, alors m n'as pas de suiv:
m->suiv = NULL; m->suiv = NULL;
return m; return m;
} }
// La liste n'est pas vide, on ajoute le maillon en tete de la nouvelle liste qu'on renvois.
m->suiv = ldept; m->suiv = ldept;
return m; return m;
} }
@ -67,6 +71,33 @@ bool vide(ListeDept ldept)
return true; return true;
return false; 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. * @brief Créer une nouvelle liste de départements vide.
* *

@ -7,9 +7,9 @@ int main(void)
ldept = listenouv(); ldept = listenouv();
ldept = ajouterEnTete(ldept, "Informatique", "John Doe", 15); ldept = ajouterEnTete(ldept, "Informatique", "John Doe", 150);
ldept = ajouterEnTete(ldept, "Bio", "Ryan Taro", 20); ldept = ajouterEnTete(ldept, "Bio", "Ryan Taro", 200);
afficherListe(ldept); afficherListe(ldept);
ldept = supprimerEnTete(ldept); ajouter(ldept, "Chimie", "Henri Laserre", 80);
afficherListe(ldept); afficherListe(ldept);
} }

@ -19,6 +19,7 @@ typedef struct
}VilleIut; }VilleIut;
// Liste.c // Liste.c
ListeDept ajouter(ListeDept ldept, char nomDept[], char resp[], int nbP);
ListeDept ajouterEnTete(ListeDept ldept, char nomDept[], char resp[], int nbP); ListeDept ajouterEnTete(ListeDept ldept, char nomDept[], char resp[], int nbP);
ListeDept supprimerEnTete(ListeDept ldept); ListeDept supprimerEnTete(ListeDept ldept);
ListeDept listenouv(); ListeDept listenouv();

Loading…
Cancel
Save