Pascal I.      Pascal II.      Delphi       Linkek     
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
   

  • egyirányú rendezett láncolt 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.

    

(C) 2004-2013, PaedDr. Végh Ladislav, Komárno, Szlovákia