LISTES CHAINÉES (DJGPP)

Messages postés
42
Date d'inscription
dimanche 26 août 2001
Statut
Membre
Dernière intervention
13 août 2007
- - Dernière réponse : spidermario
Messages postés
130
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
14 mars 2009
- 6 août 2006 à 21:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10111-listes-chainees-djgpp

spidermario
Messages postés
130
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
14 mars 2009
-
Au lieu de
#define TRUE 1
#define FALSE 0
Tu peux mettre
enum BOOL
{
FALSE,TRUE
};
Mais de toutes façons, ça ne te servira pas, je n'ai pas vu une seule utilisation de TRUE ou de FALSE dans ton programme...
cs_Xs
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008
-
Merci ! grace a ce code+ explications + refonte en C++ par vieuxLion, j'ai enfin compris lutilité et surtout la maniére de les utiliser (c'est sur, c'est pas dur de faire la class/struct, mais fo savoir l'utiliser apres).
cs_vieuxLion
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
7 -
c'est un bon source. Compliments
pour des idées d'amélioration :
mettre en cache le nombre d'éléments, proposer une fonction de recherche, utiliser C++ pour les new/delete + la protection des variables + la simplification de l'interface par rapport à l'implémentation + la généricité ... etc...
voila ma version en C++
http://www.cppfrance.com/article.aspx?Val=1104
cobra84
Messages postés
42
Date d'inscription
dimanche 26 août 2001
Statut
Membre
Dernière intervention
13 août 2007
-
Voila, j'ai mis à jour la source... On peut maintenant effacer la liste!
@+
cobra84
Messages postés
42
Date d'inscription
dimanche 26 août 2001
Statut
Membre
Dernière intervention
13 août 2007
-
Kaid: Merci pour le listing de la libération de la liste ;-)
@+
trinitacs
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1 -
Kaid >> Tu devrais ecrire carrément un tuto car les listes chaînées et les piles c'est qqch

Dommage que je ne puisse pas voir le code il ne veut pas s'afficher en entier celui la Rglll
cs_Lupin
Messages postés
1
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2002
-
C'est tres interessant pour un profane comme moi
comme tutorial c'est pas mal du tout
cs_Kaid
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
En fait, tu peux très bien implanter le concept de liste en utilisant un tableau. Le problème, c'est que si ton tableau peut contenir X éléments, quand tu arrives à X+1 éléments, il faut que tu réalloues un nouveau tableau, que tu y copies les valeurs de l'ancien tableau et enfin que tu libéres l'ancien tableau. En répétant souvent l'opération, tu plombes les performances de ton programme. Ensuite, vient le problème de la suppression d'un élément: tu dois de nouveau passer par l'allocation, la copie et la libération.

C'est pour cela qu'on n'utilise par exemple la liste chainée. En fait, c'est une succession de noeuds contenant la valeur associée et le moyen d'accéder au noeud suivant (ici un pointeur). En utilisant ce concept, pour rajouter un élément, il suffit d'allouer un nouveau noeud puis d'y copier la valeur (je passe les détails de chainage). Pour la suppression, toujours aussi simple, tu dé-références le noeud et tu libères simplement le noeud.

Il existe aussi des listes doublement chainée (pointeur sur les noeuds précédent et suivant) qui permettent encore d'améliorer les performances.
cs_Xs
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008
-
on peut expliquer svp l'utilité d'une liste chainée ? j'avoue que je comprend pas son principe...
cs_Kaid
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
Je recommence ....

Un détail: il ne sera pas plus simple d'avoir une fonction pour libérer toute la liste comme :

void FreeList(struct cHead *pHeader)
{
struct cNode *pNode=pHeader->pFirst;
struct cNode *tmpNode;

while (pNode)
{
tmpNode=pNode->pNext;
FreeNode(pNode);
pNode=tmpNode;
}

FreeHeader(pHeader);
}
cobra84
Messages postés
42
Date d'inscription
dimanche 26 août 2001
Statut
Membre
Dernière intervention
13 août 2007
-
Si vous avez des idées d'optimisation, n'hésitez pas à me les proposer.
@+ et bonne Prog