LISTES CHAINÉES (DJGPP)

cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007 - 14 nov. 2002 à 21:08
spidermario Messages postés 121 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 121 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 14 mars 2009 1
6 août 2006 à 21:09
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
26 déc. 2002 à 12:03
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 8
16 nov. 2002 à 18:42
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
15 nov. 2002 à 21:24
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
15 nov. 2002 à 19:53
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 2
15 nov. 2002 à 18:42
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
15 nov. 2002 à 06:27
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 1
14 nov. 2002 à 23:52
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
14 nov. 2002 à 23:11
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 1
14 nov. 2002 à 21:37
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
14 nov. 2002 à 21:08
Si vous avez des idées d'optimisation, n'hésitez pas à me les proposer.
@+ et bonne Prog
Rejoignez-nous