[C]supprimer element de la liste chainéé
stroumpf
Messages postés
292
Statut
Membre
-
stroumpf Messages postés 292 Statut Membre -
stroumpf Messages postés 292 Statut Membre -
Bonjour,
bonsoir à tous,
j'ai fait une fonction qui supprime les element de la liste chaine qui ont une frequence<1
quand je l'ai testé tous les element sont supprimés seul l'elemnt entete qui n'est pas supprime
je vois pas pourquoi
voila le code
cordialement
bonsoir à tous,
j'ai fait une fonction qui supprime les element de la liste chaine qui ont une frequence<1
quand je l'ai testé tous les element sont supprimés seul l'elemnt entete qui n'est pas supprime
je vois pas pourquoi
voila le code
void filtrer_liste(Liste *seq)
{
Liste *next;
Liste *premier_valide = NULL;
Liste *q =seq;
while (q != NULL)
{
// printf ("%d", q->freq);
//suup = (float)(q->freq) / (float)(NombreLigne);
// printf("%f", suup);
//
//if (suup <= Seuil)
if(q->freq<=1)
{
if(premier_valide==NULL)
{
premier_valide=q->suivant;
}
else
premier_valide->suivant=q->suivant;
// nettoyage
next = q->suivant;
free(q); // libère la mémoire de 'p'
q = next;
}
else
{
if (premier_valide == NULL)
{
premier_valide = q;
}
q = q->suivant;
}
}
// q = premier_valide;
}
cordialement
Configuration: Windows Vista Internet Explorer 7.0
4 réponses
-
Peux-tu nous donner un code minimal qui illustre ton problème et qui compile ?
Bonne chance -
-
tente ça :
void filtrer_liste(Liste *seq) { Liste *next; Liste *dernier_valide = NULL; Liste *q =seq; while (q != NULL) { if(q->freq<=1) { // nettoyage next = q->suivant; free(q); // libère la mémoire de 'p' q = next; } else { if (dernier_valide == NULL) { dernier_valide = q; seq=q; // seq pointe maintenant sur la première structure qui a une fréquence valide } else { dernier_valide->suivant=q; dernier_valide=q; } q = q->suivant; } } } -
peut etre ca marche comme ca:
Liste * filtrer_liste(Liste *seq) { Liste *head=NULL,*previous=NULL,*current=NULL,*next=NULL; for(current=seq; current!=NULL; current=next) { next = current->suivant; if (current->freq<=1) { free(current); if (previous!=NULL) previous->suivant = next; } else { previous = current; if (head==NULL) head=current; } } return head; }