Voici un exemple de suppression d'un élément dans une liste chainée. Il faut trouve l'élément dans la liste avant de l'enlever, exemple structure étudiant :
struct Etudiant {
int No;
char Nom[10];
char Prog[10];
struct Etudiant * Suivant ;
};
typedef struct Etudiant typEtud ;
**** Dans le main y a ça :
void main()
{
typEtud * lstEtud = NULL ; //liste des étudiants
typEtud * Etud = NULL ; //pointeur sur un étudiant
do
{
switch ( AffMenu() )
{
case 1:
ObtenirNo(&No);
if ( Trouve(lstEtud, No, &Etud))
RetirerMaillon(&lstEtud,Etud);
else
RefuserSuppression();
break;
}
}
while ( ! Quitter );
QuitterProg();
}
**** FONCTION RETIRER ELEMENT *****
************************************
void RetirerMaillon( struct Etudiant * * Liste,
struct Etudiant * Pred)
{
Struct Etudiant * Trouve;
if (Pred == NULL) //si c'est le premier
{
Trouve = *Liste ;
*Liste = (*Liste)->Suivant;
}
else
{
Trouve = Pred->Suivant ; //retirer de la liste
Pred->Suivant = Trouve->Suivant ;
}
free(Trouve); // retourner la mémoire au OS
}
***** FONCTION TROUVE ******
****************************
int Trouve(struct Etudiant * * Liste, int No,
struct Etudiant * * Pred)
{
typEtud * Ptr;
*Pred = NULL; //par défaut
if ( Liste == NULL)
return 0; // pas trouvé
else
{
Ptr = Liste;
while ( (Ptr != NULL) && (Ptr->No != No) ) <
{
*Pred = Ptr ;
Ptr = Ptr->Suivant;
}
if (Ptr == NULL)
return 0;
else
return 1; //On l'a trouvé
}
}
[edtdd]--Message édité par AlphaT--[/edtdd]