Liste doublement chainee
Fermé
kitana
-
2 juin 2009 à 14:19
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 - 3 juin 2009 à 11:02
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 - 3 juin 2009 à 11:02
A voir également:
- Liste doublement chainee
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste de diffusion whatsapp - Guide
- Supprimer liste déroulante excel ✓ - Forum Excel
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
4 réponses
Jodu
Messages postés
89
Date d'inscription
mardi 5 février 2008
Statut
Membre
Dernière intervention
3 février 2010
14
2 juin 2009 à 14:22
2 juin 2009 à 14:22
Bonjour,
langage ? Description plus complète du problème ? J'ai rien compris moi
langage ? Description plus complète du problème ? J'ai rien compris moi
Jodu
Messages postés
89
Date d'inscription
mardi 5 février 2008
Statut
Membre
Dernière intervention
3 février 2010
14
2 juin 2009 à 14:50
2 juin 2009 à 14:50
Et si tu donnais ton code ?
voici le code la fonction suppression
element *suppression(element *debut, element *fin,int sup)
{
element *temp =debut;
if (temp!= NULL)
{
while(temp!=NULL)
{
if(temp->val==sup)
{
if(temp->apres==NULL)
{
printf("la liste a un seul element");
}
else if(temp->avant==NULL)
{
printf("la liste est vide");
}
else
{
}
free(temp);
}
else
temp=temp->apres;
}
}
}
element *suppression(element *debut, element *fin,int sup)
{
element *temp =debut;
if (temp!= NULL)
{
while(temp!=NULL)
{
if(temp->val==sup)
{
if(temp->apres==NULL)
{
printf("la liste a un seul element");
}
else if(temp->avant==NULL)
{
printf("la liste est vide");
}
else
{
}
free(temp);
}
else
temp=temp->apres;
}
}
}
pyschopathe
Messages postés
1973
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
2 juin 2009 à 15:27
2 juin 2009 à 15:27
A quoi correspondent les paramètres de ta fonction ?
pyschopathe
Messages postés
1973
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
2 juin 2009 à 15:27
2 juin 2009 à 15:27
A quoi correspondent les paramètres de ta fonction ?
Brachior
Messages postés
613
Date d'inscription
dimanche 21 octobre 2007
Statut
Membre
Dernière intervention
22 juin 2009
46
3 juin 2009 à 11:02
3 juin 2009 à 11:02
j'vois quelques problemes dans ton code
jai supposé que debut et fin etait reciproquement le debut et la fin de ta liste
et que ta structure etait du style :
si j'me trompe dit le moi ^^
en ce qui concerne le code,
pour moi le "if (temp!= NULL)" est de trop car ton while fait exactement le meme test
et avant de passer dans la fonction
je remarque qu'elle renvoie un pointeur sur element et qu'il n'y a pas de "return" dans ta fonction ...
dans la fonction,
tu supprimes un element sans raccrocher les autres,
donc si tu supprimes le 1er element, tu perds TOUTE ta liste =X
de plus tu fais une suite "if / else if" alors que dans l'exemple d'un seul element, les 2 sont vrais.
De plus les printf ne donne pas d'information juste.
Le fait de ne pas avoir de suivant ne signifie pas que l'element est seul Oo
voila le code que moi je ferai :
element *suppression(element *debut, element *fin,int sup){ element *temp =debut; if (temp!= NULL){ while(temp!=NULL){ if(temp->val==sup){ if(temp->apres==NULL){ printf("la liste a un seul element"); } else if(temp->avant==NULL){ printf("la liste est vide"); } else{} free(temp); } else temp=temp->apres; } } }
jai supposé que debut et fin etait reciproquement le debut et la fin de ta liste
et que ta structure etait du style :
typedef struct _elt_{ int val; struct _elt_ *avant,*apres; }element;
si j'me trompe dit le moi ^^
en ce qui concerne le code,
if (temp!= NULL){ while(temp!=NULL){
pour moi le "if (temp!= NULL)" est de trop car ton while fait exactement le meme test
et avant de passer dans la fonction
je remarque qu'elle renvoie un pointeur sur element et qu'il n'y a pas de "return" dans ta fonction ...
dans la fonction,
tu supprimes un element sans raccrocher les autres,
donc si tu supprimes le 1er element, tu perds TOUTE ta liste =X
de plus tu fais une suite "if / else if" alors que dans l'exemple d'un seul element, les 2 sont vrais.
De plus les printf ne donne pas d'information juste.
Le fait de ne pas avoir de suivant ne signifie pas que l'element est seul Oo
voila le code que moi je ferai :
void suppression(element *debut, element *fin,int sup){ element *temp =debut; while( temp ){ /* identique a temp != NULL */ if( temp->val == sup ){ if( temp-avant ){ temp->avant->apres = temp->apres; /* si temp->apres est NULL, * * alors le suivant de temp->avant sera NULL, * * donc pas de soucis */ if( !(temp->apres) ){ /* identique a temp->apres == NULL */ fin = temp->avant; /* si temp etait la fin de liste, * * on dit que maintenant c'est l'element d'avant */ } } if( temp->apres ){ temp->apres->avant = temp->avant; /* si temp->avant est NULL, * * alors le suivant de temp->apres sera NULL, * * donc pas de soucis */ if( !(temp->avant) ){ debut = temp->apres; /* si temp etait le debut de liste, * * on dit que maintenant c'est l'element d'apres */ } } /* maintenant que les deux element avant et apres sont raccorchés, * * on peut supprimer temp; */ free(temp); /* si tu ne veux supprimer qu'un element tu fais un "return;" ici * * sinon il supprimera en boucle tous les element ayant sup comme valeur */ } else temp = temp->apres; } }
2 juin 2009 à 14:48