Liste chainée! [Résolu]

Signaler
Messages postés
46
Date d'inscription
mardi 2 juin 2009
Statut
Membre
Dernière intervention
7 octobre 2009
-
Messages postés
2
Date d'inscription
vendredi 3 octobre 2003
Statut
Membre
Dernière intervention
8 août 2009
-
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

Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Ecoute :
une liste chaînée, doit être nécessairement chaînée
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
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 !
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
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
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
@ 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
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
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
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
@ 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 !
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
@ 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
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
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 !
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
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
Messages postés
2
Date d'inscription
vendredi 3 octobre 2003
Statut
Membre
Dernière intervention
8 août 2009

Salut,

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