Bonsoir, j'aimerai je suis débute en langage C et actuellement je travaille les listes chaînée mais j'arrive pas comprendre quelques notions. J'aimerai savoir quelle est la différence entre PTR!=NULL et PTR->SUIVANT!=NULL Ma question peu paraître un peu stupide mais j'arrive pas à résoudre des problème à cause de ça. Au passage j'aimerai que vous me filez un coup de main sur ce programme
maliste SupprimerEnMilie(maliste tete, int x){
ptr1=tete;
int i;
for (i = 1; i < x; i++)
{
ptr1=ptr1->suivant;
}
ptr=ptr1->suivant;
ptr1=ptr1->suivant->suivant;
free(ptr);
tete=ptr1;
return tete;
}
Si tu fais des dessins tu pigeras plus facilement.
Dans une liste en gros l'idée c'est que tu représentes pas vraiment de structure "liste" mais plutôt une structure "maillon".
Une liste c'est juste une suite de maillons. Ces maillons tu peux mettre ce que tu veux dedans c'est des simples structures avec des types de données a l'intérieur. La seule exigence pour que ce maillon puisse constituer une liste c'est qu'il ait un pointeur "next". Ce pointeur next sert simplement a dire où se trouve en mémoire la "suite" de la liste (qui n'est rien d'autre qu'un autre maillon avec lui même des donnes et un pointeur next).
En fait le pointeur next sera juste un pointeur vers un type "maillon". Ce pointeur est indispensable a la liste car c'est lui qui permet de la parcourir. Plus haut j'ai dis que le "next" de chaque maillon pointait vers un autre maillon SAUF le dernier maillon en fin de liste qui a sont next qui pointe vers NULL (pour indiquer que c'est la fin de la liste justement).
Donc pour ta question, ptr != Null permet de vérifier si tu es arrivé a la fin de la liste (tu as passé le dernier maillon). Vérifier ptr->next!=null permet de vérifier si tu es sur le dernier maillon (son next pointe sur null).
La fonction que tu as donné permet de supprimer un maillon en position dans x la liste. En gros tu parcours ta liste a l'aides des pointeur next (c'est la boucle for, qui est bizarre d'ailleurs puisque tu sors pour refaire une fois la même chose ... Bref). Une fois que tu es arrivé tu "retiens" le maillon a supprimer dans ptr. Tu enlèves le maillon juste après en le déliant (c'est le next->next, fait un dessin !) et tu le supprimes avec free (attention tu ne le mets pas à null donc porte ouverte aux double free, use after free et compagnie !).
Bonjour Xenoliss et Merci infiniment c'est maintenant beaucoup plus claire, je ferai un retour si je trouve cette fonction
(^_^)
suppression d'élément en une position liste chanée
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.