[c] suppression d'elements ds liste chainée

suppression d'elements ds liste chainée [c] - C++ - Programmation

Marsh Posté le 08-02-2003 à 22:16:54    

Comment supprimer un element présent ds une liste chainée d'entier??
 
J'ai essayé ca:

Code :
  1. liste_ch supprime(liste_ch L, int E )
  2. {
  3. maillon *parcours, *pl;
  4. parcours=E;
  5.        while(parcours != NULL)
  6.        {
  7. if(parcours == pl)
  8. {
  9.  pl = parcours->suiv;
  10. }
  11. else
  12. {
  13.   pl->suiv = parcours->suiv;
  14.   free(parcours);
  15. }
  16.        }
  17. }


 
Mais sans succès...

Reply

Marsh Posté le 08-02-2003 à 22:16:54   

Reply

Marsh Posté le 08-02-2003 à 22:21:07    

Code :
  1. void suppr_suivant(adr_comp *prec)
  2. {
  3.   adr_comp a_virer;
  4.   if(prec==NULL || prec->suiv==NULL)
  5.     {puts("rien à supprimer" );return;}
  6.   a_virer=prec->suiv;
  7.   prec->suiv=a_virer->suiv;
  8.   free(a_virer);
  9. }
  10. void suppr_premier(adr_comp *prem)
  11. {
  12.   adr_comp a_virer;
  13.   if(prem==NULL) {puts("rien à supprimer" );return;}
  14.   a_virer=prem;
  15.   prem=prem->suiv;
  16.   free(a_virer);
  17. }
  18. void suppr_tout(adr_comp *prem)
  19. /* attention : ne met pas NULL dans prem qui pointe donc toujours sur la liste, qui n'est plus allouée mais dont le contenu n'a peut-être pas changé */
  20. {
  21.   adr_comp deuxieme;
  22.   while(prem!=NULL)
  23.    {
  24.     deuxieme=prem->suiv;
  25.     free(prem);
  26.     prem=deuxieme;
  27.    }
  28. }


Message édité par Harkonnen le 08-02-2003 à 22:31:16

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-02-2003 à 22:35:25    

Ca marche meme si le nombre à supprimer est présent plusieur fois ds la liste chainée ?

Reply

Marsh Posté le 08-02-2003 à 22:39:44    

FabienM a écrit :

Ca marche meme si le nombre à supprimer est présent plusieur fois ds la liste chainée ?


Oui, car tu ne travailles pas avec les données de la liste, mais avec les pointeurs des données de cette liste. Une adresse étant unique, aucun souci.
 
Par contre, pour supprimer un élément à l'intérieur de la liste (fonction supp_suivant), tu dois impérativement connaitre l'adresse de l'élément précédent (paramètre prec).


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-02-2003 à 12:28:36    

Merci, je vais voir ça.

Reply

Marsh Posté le 09-02-2003 à 12:56:02    

Harkonnen a écrit :

Code :
  1. void suppr_suivant(adr_comp *prec)
  2. {
  3.   adr_comp a_virer;
  4.   if(prec==NULL || prec->suiv==NULL)
  5.     {puts("rien à supprimer" );return;}
  6.   a_virer=prec->suiv;
  7.   prec->suiv=a_virer->suiv;
  8.   free(a_virer);
  9. }




 
je comprends pas pourquoi tu fais un test si le pointeur pointe vers quelque chose, ET un test pour savoir si la chose pointée contient quelque chose  
 
si prec contient rien du tout, la variable pointée est forcément vide
 
si prec contient kke chose, a moins d'une erreur en memoire, prec->suiv est non vide

Reply

Marsh Posté le 09-02-2003 à 13:55:43    

Skylight a écrit :


 
je comprends pas pourquoi tu fais un test si le pointeur pointe vers quelque chose, ET un test pour savoir si la chose pointée contient quelque chose  
 
si prec contient rien du tout, la variable pointée est forcément vide
 
si prec contient kke chose, a moins d'une erreur en memoire, prec->suiv est non vide


relis bien, si prec n'a pas de suivant, tu peux pas supprimer le suivant de prec (puisqu'il n'en a pas  :pt1cable: )

Reply

Marsh Posté le 09-02-2003 à 15:11:31    

Skylight a écrit :

je comprends pas pourquoi tu fais un test si le pointeur pointe vers quelque chose, ET un test pour savoir si la chose pointée contient quelque chose


 
c'est pas un ET que je fais (opérateur &&), mais un OU (opérateur ||)
 
si prec ne pointe sur rien OU si prec->suiv ne pointe sur rien (prec->suiv est l'élément qu'on cherche à supprimer), alors forcément il n'y a rien à supprimer.
 
il suffit qu'au moins une de ces 2 conditions soit remplie pour qu'il n'y ait rien à supprimer


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-02-2003 à 16:29:22    

merde j'ai mal lu :D
 
 
 
 :whistle:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed