[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
A voir également:
- [C]supprimer element de la liste chainéé
- Supprimer rond bleu whatsapp - Guide
- Liste déroulante excel - Guide
- Impossible de supprimer une page word - Guide
- Impossible de supprimer un fichier - Guide
- Supprimer pub youtube - Accueil - Streaming
4 réponses
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;
}