Voila une version plus clair avec aucun apelle de procedure pour mieux comprendre:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
procedure ajoutEnQueue(var a:liste;x:integer);
var e,d:liste;
begin
if a=nil then
begin
a^.info:=x;
a^.suivant:=nil;
end
else
begin
e:=a;
new(d);
while (e^.suivant<>nil) do e:=e^.suivant;
d^.info:=x;
d^.suivant:=nil;
e^.suivant:=d;
end;
end; |
Alors pour le cas ou a=nil ok, mais pour a <>nil je comprend pas du tout, point par point:
- A la fin du while e c'est le dernier élement de a donc e^.info=3 et e^.suivant=nil
-e^.suivant:=d -> on a e^.info=3 ensuite e pointe vers d qui lui vaux d^.info=x et d^.suivant=nil
donc au final je n'est absolument pas changer la liste a si j'avais voulut la changer j'aurai par exemple fait a^.suivant^.suivant:=e et la ok j'ai changer la liste a.
Je teste sur pc et j'ai la liste a changer, je comprend absolument pas pourquoi ! (j'ai dût louper quelque chose dans mon cour ou pas assimiler un point important)
merci d'avance pour vos explication !
Partager