Liste chainée!

Résolu
Samou85 Messages postés 46 Date d'inscription mardi 2 juin 2009 Statut Membre Dernière intervention 7 octobre 2009 - 31 juil. 2009 à 14:46
lg_brest Messages postés 2 Date d'inscription vendredi 3 octobre 2003 Statut Membre Dernière intervention 8 août 2009 - 8 août 2009 à 10:36
BONJOUR
Bon j'ai le type
type
PListeElem = ^TListeElem;
TListeElem = record
Elem: integer;
Suiv: PListeElem;
end;
Alors je voudrais savoir est ce que quand on crée une liste chainée par l'instruction:
New(Liste);
Liste.Elem:=3;

est ce qu'il faut que je mette aussi
Liste.Suiv:=Nil;


Merci de me répondre!

10 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
31 juil. 2009 à 18:25
Ecoute :
une liste chaînée, doit être nécessairement chaînée
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
31 juil. 2009 à 18:26
Mince désolé j'ai cliqué sur envoyer sans faire exprès.

Donc oui, quand tu ajoutes un élément dans ta liste chaînée (à la fin par exemple), Suiv doit prendre la valeur NIL.
Or, je t'engage à ajouter un pointeur sur l'élément précédent (Prec), sinon ta liste chaînée ne marchera pas (comment revenir en arrière ???).

Cordialement, Bacterius !
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
31 juil. 2009 à 18:30
ta question est un peu vague ... comprends tu bien le principe d'une liste chainée ???

si , quand tu créer ta liste, ta liste est vide , effectivement il n'y a rien après, donc oui tu mets NIL au suiv pr dire qu'il n'y a pas d'éléments après , sinon ben tu la chaine avec l'élément suivant tout simplement

potasse un peu tes cours (si tu es étudiant) parce que je crois que tu n'as pas bien pigé le principe.

Tu peux regarder des exemple en C (ou dans n'importe quel autre langage), le principe de base reste le même
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
31 juil. 2009 à 18:34
@ bacterius : une liste doublement chainée n'est pas obligatoire , il te suffit de retenir dans un pointer l'élément précédent

il y a des manipulations un rien compliqué a faire pour gérer les listes chainées mais il suffit de savoir faire quelques opérations de bases :

créer une liste

insérer un éléments en tête de liste , à la fin et au millieu , qui peuvent être simple si bien penser

supprimer un élément

supprimer la liste
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
31 juil. 2009 à 18:37
quand je devais bosser ça à l'école , je pense que ça m'avait bien aider

c'est du C mais c'est du pareil au même

http://www.siteduzero.com/tutoriel-3-36245-les-listes-chainees.html
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
31 juil. 2009 à 18:51
@ bacterius : une liste doublement chainée n'est pas obligatoire , il te suffit de retenir dans un pointer l'élément précédent


Euh ... c'est pas ce que j'ai dit ?

[...] à ajouter un pointeur sur l'élément précédent (Prec)


Où ce sont des concepts différents ?

Cordialement, Bacterius !
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
1 août 2009 à 10:50
@ bacterius :
veut tu faire ca :

PListeElem = ^TListeElem;

TListeElem = record
Elem: integer;
Suiv: PListeElem;
Prec : PListeElem;
end;

ou retenir dans un pointer l'élément précédent quand tu parcours ta liste ?

le premier cas, c'est une liste doublement chainé ...

mais je pense que tu parles du deuxième cas , dans ce cas la , c'est ma faute
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 août 2009 à 12:08
Ben en fait depuis hier j'ai oublié ce dont je voulais parler (honte à moi ). Mais je crois que je pensais à la première option (liste doublement chaînée).
Mais avec ta méthode (dans la boucle, retenir l'élément précédent), je ne vois toujours pas comment revenir en arrière ... (partir du dernier élément pour revenir au premier).

Cordialement, Bacterius !
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
1 août 2009 à 12:38
ca tu ne sais pas le faire !

c'est le problème avec un liste chainée , il faut la parcourir ...

non, le pointeur de sauvegarde sert quand tu veux ajouter un éléments à ta chaine (vu que tu va devoir le caser, il faut mettre a jour le Suiv de ton élément qui va pointer vers le nouveau bloc à insérer ... pfou c'est dur à expliquer comme ca )

mais ce qui est bien avec les listes chainés, c'est que les blocs ne se suivent pas en mémoire, ce qui peut être un plus dans certain cas ...

Mais bon , on a du l'étudier surtout pour savoir manipuler les pointeurs (et ca dans tt les sauces ! )

Liste chainée qui renvoi sur une autre liste chainée ... des trucs inutiles mais qui t'apprenne une certaine rigueur
0
lg_brest Messages postés 2 Date d'inscription vendredi 3 octobre 2003 Statut Membre Dernière intervention 8 août 2009
8 août 2009 à 10:36
Salut,

dans certains cas, j'utilise plutôt une TList ou équivalent...
0
Rejoignez-nous