LISTE CHAINEE!

Samou85 Messages postés 46 Date d'inscription mardi 2 juin 2009 Statut Membre Dernière intervention 7 octobre 2009 - 24 août 2009 à 15:24
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 30 août 2009 à 22:35
Bonjour à tous! ma question est la suivante:
quand on crée une liste chainée L1, à la fin doit on lui affecter "NIL"??

Et si j'affecte au début L2:=L1 c'est à dire à un moment où L1 n'est pas encore totalement crée, est ce que celà me fera quand meme revenir au début de faire: L1:=L2???

MERCI de ma répondre!

1 réponse

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
30 août 2009 à 22:35
les listes chainées sont des pointeurs.

l'identifiant (L1 ou L2) sont des variables (en fait ce sont des pointeurs egalement que le compilateurs reconnais par des noms definis) de type pointeur.

temps que L1 ou L2 ne sont pas crée ils sont dit "invalide" ou "null", delphi assigne Nil directement a tout pointeur non encore créé.
par soucis d'etre sur que le compilateur le fasse, surtout si la fiabilité de notre programme depend des tests V = NIL ou V <> NIL on peu forcer l'assignation a NIL sur les pointeurs non encore definit, exemple :

var L1 : pointer = nil;
var L2 : pointer = nil;

procedure Initialize;
begin
if L1 = nil then
begin
New(L1);
L2 := L1;
end;
end;

procedure Finalize;
begin
if L1 <> L2 then
begin
Dispose(L1);
Dispose(L2);
L1 := nil;
L2 := nil;
end
else
begin
Dispose(L1);
L2 := nil;
L1 := nil;
end;
end;


dans les listes chainée, chaque anneaux pointe au moins sur le pointeur suivant ou precedent, ou les deux dans le cas d'un liste double.

on as donc :

[anneau (pointeur) -> prec/suiv (pointeur)]

si anneau est assigné mais que prec/suiv n'est pas assigné, on peu tout de même assigné le pointeur d'anneau a un autre.


pour comprendre les listes chainées il est necessaire de bien comprendre le principe des pointeurs, leurs comportements, leurs creation, leurs destruction, leurs manipulations.


donc reprenons :

au demarrage du programme L1 et L2 ont cette forme :

type ListeChainée [^precedent | ^anneau | ^suivant]

L1 : ListeChainée [nil | nil | nil]
L2 : ListeChainée [nil | nil | nil]

sur New(L1)

contenus de L1 : [nil | $adresseL1 | nil]

sur L2 = L1

contenus de L2 : [nil | $adresseL1 | nil]



si l'on fait :

New(L1);
New(L2);
L1.Suivant := L2;
L2.Precedant := L1;

contenus L1 : [nil | $adresseL1 | $adresseL2]
contenus L2 : [$adresseL1 | $adresseL2 | nil]


voila
Rejoignez-nous