1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| program liste_circulaire;
type pliste_simple=^element;
element=record
val:integer;
suiv:pliste_simple;
end;
function liste_vide(var tete:pliste_simple):pliste_simple;
begin
liste_vide:=NIL;
end;
function insertion(var tete:pliste_simple;x:integer):pliste_simple;
var
nouv,prec,cour:pliste_simple;
begin
new(nouv);
nouv^.val:=x;
{Insertion liste vide ou en tete de liste}
if (tete=NIL) or (tete^.val>x) then
begin
nouv^.suiv:=tete;
insertion:=nouv;
exit
end
else
{Insertion en milieu et fin de liste}
begin
prec:=tete;
cour:=tete^.suiv;
while (cour<>NIL) and (cour^.val<x) do
begin
prec:=prec^.suiv;
cour:=cour^.suiv;
end;
nouv^.suiv:=cour;
prec^.suiv:=nouv;
insertion:=tete;
end;
end;
procedure afficher2(tete:pliste_simple);
var
ptr:pliste_simple;
begin
ptr:=tete;
if (ptr=NIL) then
begin
writeln('Tete -> NUL, la liste est vide');
end
else
begin
write('Tete -> ');
while (ptr<>NIL) do
begin
write(ptr^.val,' -> ');
ptr:=ptr^.suiv;
end;
writeln('Tete');
end;
end;
var
liste, tete, precedent, dernier, cour:pliste_simple;
n,i:integer;
begin
liste:=liste_vide(liste);
write('Combien d''elements?');
readln(n);
new(tete);
tete^.val := 1;
precedent:=tete;
for i:=2 to n-1 do
begin
liste:=insertion(tete,i);
end;
new(dernier);
dernier^.val := n;
precedent := tete;
cour := tete^.suiv;
while (cour<>Tete) and (cour^.val < dernier^.val) do
begin
precedent := precedent^.suiv;
cour := cour^.suiv;
end;
dernier^.suiv:=tete;
precedent^.suiv:= dernier;
writeln('Affichage de la liste');
afficher2(liste);
readln;
end. |
Partager