Czy ktoś może mi wytłumaczyć kod programu (lista samo sortująca), do czego służą poszczególne procedury, do czego służą dane warunki, pętle, zmienne typu: głowa, pomoc itp. z góry bardzo dziekuje
program pLista;
uses Crt;
type
Wskaznik = ^Element;
Element = record
Liczba : integer;
Wsk : Wskaznik
end;
const
Glowa : Wskaznik = nil;
var
znak: char;
elem: integer;
Obecny : Wskaznik;
{
procedure Inicjalizuj;
begin
Glowa:=nil
end;
}
procedure UtworzElement(s:integer;Obecny:Wskaznik);
var
Nowy : Wskaznik;
k: integer;
begin
new(Nowy);
Nowy^.Liczba:=s;
Nowy^.Wsk:=nil;
if Nowy^.Liczba > Obecny^.Liczba then
begin
Obecny^.Wsk:=Nowy;
end
else
begin
k:=Nowy^.Liczba;
Nowy^:=Obecny^;
Obecny^.Liczba := k;
Obecny^.Wsk := Nowy;
end;
end;
procedure UtworzGlowe(s:integer);
begin
new(Glowa);
Glowa^.Liczba:=s;
Glowa^.Wsk:=nil;
end;
function Szukaj(s:integer):Wskaznik;
var
Pomoc : Wskaznik;
begin
Pomoc:=Glowa;
while (Pomoc^.Liczba < s) and (Pomoc^.Wsk <> nil) do
begin
Pomoc:=Pomoc^.Wsk;
end;
Szukaj:=Pomoc;
end;
procedure Wstaw(s:integer);
var
Pomoc,Nowy : Wskaznik;
i : integer;
begin
if Glowa = nil then
UtworzGlowe(s)
else
UtworzElement(s,Szukaj(s));
end;
procedure Usun(s:integer);
var Usuwany, Obecny, Tymcz: Wskaznik;
k: integer;
begin
if Glowa<>nil then
Obecny:=szukaj(s);
if Obecny^.Liczba = s then
begin
if Obecny = Glowa then
begin
if Glowa^.Wsk = nil then
begin
Glowa:=nil;
dispose(Glowa);
end
else
begin
Usuwany:=Glowa;
Glowa:=Glowa^.Wsk;
dispose(Usuwany);
end;
end
else
begin
Tymcz:=Glowa;
while (Tymcz<>Obecny) do
begin
k:=Tymcz^.Liczba;
Tymcz^.Liczba:=Obecny^.Liczba;
Obecny^.Liczba:=k;
Tymcz:=Tymcz^.Wsk;
end;
Usuwany:=Glowa;
Glowa:=Glowa^.Wsk;
dispose(Usuwany);
end;
end;
end;