Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
733 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°304719
FabienM
Posté le 08-02-2003 à 22:16:54  profilanswer
 

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...

mood
Publicité
Posté le 08-02-2003 à 22:16:54  profilanswer
 

n°304721
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2003 à 22:21:07  profilanswer
 

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)
n°304728
FabienM
Posté le 08-02-2003 à 22:35:25  profilanswer
 

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

n°304733
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2003 à 22:39:44  profilanswer
 

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)
n°304823
FabienM
Posté le 09-02-2003 à 12:28:36  profilanswer
 

Merci, je vais voir ça.

n°304832
skylight
Made in France.
Posté le 09-02-2003 à 12:56:02  profilanswer
 

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

n°304846
gloop
Posté le 09-02-2003 à 13:55:43  profilanswer
 

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: )

n°304853
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 09-02-2003 à 15:11:31  profilanswer
 

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)
n°304888
skylight
Made in France.
Posté le 09-02-2003 à 16:29:22  profilanswer
 

merde j'ai mal lu :D
 
 
 
 :whistle:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
Gestion de liste sous accessGriser un/des champs en fonction d'une liste de choix.
Pb de suppression de répertoire à partir d'une servlet"out of memory" dans la liste d'initialisation
[ACCESS] Filtrer données liste déroulante par rapport à une autre list[VB] Une liste de bon sites pour VB(last update 16/02/2003)
[HTML&PHP] Probleme de SELECTED dans une liste déroulanteListe des utilisateurs sous unix
Une liste de valeurs acceptables pour des entiers[VC++] Traitement d'une liste de Nombres
Plus de sujets relatifs à : [c] suppression d'elements ds liste chainée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR