Pascal II. 01. Eljárások, függv... 01. Gyakorló feladatok 02. Felsorolt típus, ... 02. Gyakorló feladatok 03. Állományok kezelése 03. Gyakorló feladatok 04. Unitok, CRT unit 04. Gyakorló feladatok 05. DOS unit, rendezé... 05. Gyakorló feladatok 06. Rekurzió, quicksort 06. Gyakorló feladatok 07. Backtracking 07. Gyakorló feladatok 08. GRAPH unit 08. Gyakorló feladatok 09. Kép mozgatása 09. Gyakorló feladatok 10. Winmouse unit 10. Gyakorló feladatok 11. Dinamikus adatsze... 11. Gyakorló feladatok 12. Dinamikus adatsze... 12. Gyakorló feladatok 13. Dinamikus adatsze... 13. Gyakorló feladatok
|
Programozás 2 (Pascal)
12
Dinamikus adatszerkezetek - egyirányú rendezett lista
12.1 Egyirányú rendezett láncolt lista
A következő példában egy rendezett
egyirányú láncolt listát alakítunk
ki. A lista mindegyik eleme tartalmazza egy személy
nevét, születési évét és egy
mutatót a lista következő elemére. A listát
úgy alakítjuk ki, hogy az mindig rendezett legyen a nevek
szerint. Tehát az új elemet mindig a lista megfelelő
helyére szúrjuk be.
program Pelda33;
{ egyiranyu rendezett lancolt lista }
uses crt;
type PTElem = ^TElem; { a PTElem egy mutato,
ami TElem tipusra mutat }
TElem = record { TElem tipus definialasa }
nev: String;
szev: Integer;
kov: PTElem;
end;
var elso,akt,uj: PTElem;
i,x: integer;
begin
clrscr;
write('Mennyi elemet akarsz megadni? ');
readln(x);
{ elemek megadasa }
for i:=1 to x do
begin
writeln;
new(uj);
write(i:2,'. Nev: ');
readln(uj^.nev);
write(' Szuletesi ev: ');
readln(uj^.szev);
uj^.kov := nil;
if elso=nil then
elso := uj { elso elem }
else begin { mar van elso }
akt := elso;
if uj^.nev<akt^.nev then
begin { elsonel kisebb }
uj^.kov := elso;
elso := uj;
end
else
begin { ha elsonel nagyobb, megkeressuk a helyet }
while (akt^.kov<>nil) and
(akt^.kov^.nev<=uj^.nev) do
akt := akt^.kov;
{ majd a megfelelo helyre beszurjuk }
uj^.kov := akt^.kov;
akt^.kov := uj;
end;
end;
end;
writeln;
{ elemek kiirasa }
akt := elso;
while akt<>nil do
begin
writeln(akt^.nev:10,akt^.szev:5);
akt := akt^.kov;
end;
{ memoria felszabaditasa }
akt := elso;
while akt<>nil do
begin
elso := akt^.kov;
dispose(akt);
akt := elso;
end;
readkey;
end.
|