Probleme dans les listes en c
Résolu/Fermé
abdess111
Messages postés
40
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 mai 2008
-
28 févr. 2008 à 12:32
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 - 11 mars 2008 à 21:03
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 - 11 mars 2008 à 21:03
A voir également:
- Probleme dans les listes en c
- Liste déroulante en cascade - Guide
- Liste déroulante dans excel - Guide
- 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
- Trouver la position d'un élément dans une liste python ✓ - Forum Python
- Tous les code possible de 0 à 9 (4 chiffres ) liste - Forum Jeux vidéo
3 réponses
SebManfred
Messages postés
484
Date d'inscription
mardi 28 août 2007
Statut
Membre
Dernière intervention
20 mai 2011
128
28 févr. 2008 à 12:58
28 févr. 2008 à 12:58
Salut,
malloc t'alloue un espace mémoire et te renvoie l'adresse de cet espace. si tu ne le récupère pas, il est inutilisable et ne peut pas être désalloué. c'est une fuite mémoire. nouveau sert à ça
premier est le pointeur de tête de ta liste, c'est lui qui te permet d'avoir le début de ta liste.
tu accède aux différents éléments de ta liste en partant du 1er et en te balladant de proche en proche, d'un élément à un autre, en utilisant le pointeur suivant de la structure, qui pointe, comme son nom l'indique, l'élément suivant de ta liste.
précédent, comme suivant, sont 2 pointeurs qui vont te permettre de travailler sur ta liste, d'ajouter ou d'effacer des maillons, que ça soit en début, au milieu ou à la fin de ta liste
par exemple, si tu as une liste de 30 éléments et que tu veux en ajouter un en 10e position, du créé ton maillon par :
nouveau = (test)malloc(sizeof(test));
ensuite, tu positionne ton pointeur suivant sur le 9e élément de ta liste par :
int nb = 9; // si tu veux aller sur le 9e... remplace par n si tu veux aller sur le n-ième
suivant = premier;
for(int i=1;i<nb;i++)
{
suivant = suivant->suivant;
}
ensuite, tu fais pointer le pointeur suivant de ton nouveau maillon sur la fin de ta chaine (dans cet ordre, sinon tu perds la fin de ta chaine, et là, c'est la GROSSE fuite mémoire)
nouveau->suivant = suivant->suivant;
enfin, tu insère ton nouveau maillon après le 9e :
suivant->suivant = nouveau;
j'espère avoir répondu à ta question
malloc t'alloue un espace mémoire et te renvoie l'adresse de cet espace. si tu ne le récupère pas, il est inutilisable et ne peut pas être désalloué. c'est une fuite mémoire. nouveau sert à ça
premier est le pointeur de tête de ta liste, c'est lui qui te permet d'avoir le début de ta liste.
tu accède aux différents éléments de ta liste en partant du 1er et en te balladant de proche en proche, d'un élément à un autre, en utilisant le pointeur suivant de la structure, qui pointe, comme son nom l'indique, l'élément suivant de ta liste.
précédent, comme suivant, sont 2 pointeurs qui vont te permettre de travailler sur ta liste, d'ajouter ou d'effacer des maillons, que ça soit en début, au milieu ou à la fin de ta liste
par exemple, si tu as une liste de 30 éléments et que tu veux en ajouter un en 10e position, du créé ton maillon par :
nouveau = (test)malloc(sizeof(test));
ensuite, tu positionne ton pointeur suivant sur le 9e élément de ta liste par :
int nb = 9; // si tu veux aller sur le 9e... remplace par n si tu veux aller sur le n-ième
suivant = premier;
for(int i=1;i<nb;i++)
{
suivant = suivant->suivant;
}
ensuite, tu fais pointer le pointeur suivant de ton nouveau maillon sur la fin de ta chaine (dans cet ordre, sinon tu perds la fin de ta chaine, et là, c'est la GROSSE fuite mémoire)
nouveau->suivant = suivant->suivant;
enfin, tu insère ton nouveau maillon après le 9e :
suivant->suivant = nouveau;
j'espère avoir répondu à ta question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
28 févr. 2008 à 13:05
28 févr. 2008 à 13:05
Salut,
regarde ici, c'est fait pour ;-)
http://www.commentcamarche.net/faq/sujet 7444 liste simplement chainee
regarde ici, c'est fait pour ;-)
http://www.commentcamarche.net/faq/sujet 7444 liste simplement chainee
abdess111
Messages postés
40
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 mai 2008
1
11 mars 2008 à 21:03
11 mars 2008 à 21:03
merci :-)