1- probablement
2-
debut = encourt->suivant;
Modifie la variable LOCALE debut, mais ne modifie pas le début de la liste dans le programme appelant.
3- Ta gestion de la liste et de nb est une source de problèmes : La structure de la liste n'a rien à voir avec le nombre de ses éléments *nb. Ton insertion/suppression ne doit pas avoir besoin de cette valeur, mais seulement la mettre à jour (si tu en as besoin).
1 2 3 4 5 6 7
| - Placer encourt au début de la liste et precedent à NULL
- Tant que encourt n'est pas NULL
Si encourt est à supprimer :
Si precedent est NULL : Stocker dans la nouvelle tete de liste encourt->suivant
Sinon : placer precedent->suivant à encourt->suivant
libérer encourt, décrémenter le nombre d'éléments et sortir
Sinon placer precedent à encourt et remplacer encourt par encourt->suivant |
Ce qui donne quelque chose comme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| void supprimer(livre **debut,int *nb)
{
livre * encourt;
livre * precedent = NULL;
//......
for( encourt= *debut; encourt != NULL; encourt = encourt->suivant)
{
if (strcmp(titre,encourt->titre)==0)
{
if(precedent == NULL) *debut= encourt->suivant;
else precedent->suivant = encourt->suivant;
free(encourt);
*nb = *nb-1;
break;
}
precedent = encourt;
}
}
//.....
supprimer(&liste, &nb); |
4- Il serait intéressant de regrouper les informations de la liste en une structure. Par exemple :
1 2 3 4 5
| typedef struct
{
livre * debut;
int nb;
} ListeLivre; |
et de modifier en conséquence la fonction supprimer (et ajouter)
Partager