13
Lineárně zřetězený seznam • Datová struktura umožňující uchovávat posloupnost proměnného počtu prvků • Základní operace – vložení prvku – odebrání prvku Obě operace je možno provádět na libovolném místě seznamu

Lineárně zřetězený seznam

  • Upload
    libby

  • View
    70

  • Download
    0

Embed Size (px)

DESCRIPTION

Lineárně zřetězený seznam. Datová struktura umožňující uchovávat posloupnost proměnného počtu prvků Základní operace vložení prvku odebrání prvku Obě operace je možno provádět na libovolném místě seznamu. Lineárně zřetězený seznam příklad. začátek. Definice typu seznam. t ype - PowerPoint PPT Presentation

Citation preview

Page 1: Lineárně zřetězený seznam

Lineárně zřetězený seznam

• Datová struktura umožňující uchovávat posloupnost proměnného počtu prvků

• Základní operace– vložení prvku– odebrání prvku

Obě operace je možno provádět na libovolném místě seznamu

Page 2: Lineárně zřetězený seznam

Lineárně zřetězený seznam

příklad

začátek

Page 3: Lineárně zřetězený seznam

Definice typu seznam

type

ukprvek=^prvek;

prvek=record

hodnota:thodnota;

nasl:ukprvek;

end;

seznam=record

celo,konec:ukprvek;

end;

Page 4: Lineárně zřetězený seznam

Vkládání do seznamu

• Na začátekprocedure vloz_z(var s:seznam;x:thodnota);begin

new(p);p^.hodnota:=x;if s^.konec=nil then s^.konec:=p;p^.nasl:=s^.celo;s^.celo:=p;

end;

začátek

p X

Page 5: Lineárně zřetězený seznam

Vkládání do seznamu

• Na konecprocedure vloz_k(var s:seznam;x:thodnota)

begin

new(p);

p^.hodnota:=x;

if s^.konec<>nil

then

begin

s^.konec^.nasl:=p;

s^.konec:=s^.konec^.nasl;

end

else s^.konec:=p;

if s^.celo=nil then s^.celo:=p;

end;

Page 6: Lineárně zřetězený seznam

Vkládání do seznamu

• Za prvek na který ukazuje ukazatel „za“

procedure vloz(var s:seznam;var za:ukprvek;x:thodnota);var p:ukprvek;begin

new(p);p^.nasl:=za^.nasl;za^.nasl:=p;If s^.posl=za then s^.posl:=p;

end;

za

p

Page 7: Lineárně zřetězený seznam

Vkládání do seznamu

• Před prvek, nakterý ukazuje „před“– Záměnou hodnot nového prvku a prvku

před^, převedeme na předcházející případ

procedure vloz(var s:seznam;var před:ukprvek;x:thodnota);

var pom:thodnota;p:ukprvek;

beginnew(p);pom:=před^.hodnota;před^.hodnota:=x;p^.hodnota:=pom;p^.nasl:=před^.nasl;před^.nasl:=p;

end;

Page 8: Lineárně zřetězený seznam

Vytvoření seznamu

• Pořadí prvků v seznamu je obráceno proti pořadí na vstupu – opakovaně se použije procedura pro vkládání do seznamu na začátek

procedure vytvoř(var s:seznam)s^.celo:=nil;s^.konec:=nil;read(x);while x<>konecova_hodnota do begin

vloz_z(s,x);read(x);

end;

Page 9: Lineárně zřetězený seznam

Vytvoření seznamu

• Zachováno pořadí vstupu – Opakovaně se použije procedura pro

vkládání do seznamu na konec

procedure vytvor(var s:seznam;x:thodnota);var x:thodnota;begin

s^.celo:=nil;s^.konec:=nil;read(x);while x<>koncova_hodnota dobegin

vloz_k(s,x);read(x);

end;end;

Page 10: Lineárně zřetězený seznam

Procházení seznamu

procedure pruchod(var s:seznam);

var p:ukprvek;

begin

p:=s^.celo;

while p<>nil do

begin

„zpracování prvku p^“

p:=p^.nasl;

end;

end;

Page 11: Lineárně zřetězený seznam

Hledání prvku v seznamu

function hledej(var s:seznam;x:thodnota):ukprvek;var p:ukprvek;begin p:=s^.celo; while(p<>nil) and(p^.hodnota<>x) do p:=p^.nasl; hledej:=p;end;

Lépefunction hledej(var s:seznam;x:thodnota):ukprvek;Var p:ukprvek;begin p:=začátek; nalezena:=false;while(p<>nil) and not nalezena do

if p^.hodnota<>x then nalezena:=trueelse p:=p^.nasl;

hledej:=p;end;

Page 12: Lineárně zřetězený seznam

Vypuštění prvku ze seznamu

1. Prvek s hodnotou xfunction vymaz(var s:seznam;x:thodnota):boolean;begin p:=s^.začátek; while(p^.nasl<>nil) and (p^.nasl^.hodnota<>x) do p:=p^.nasl; if p^.nasl<>nil then begin pom:=p^.nasl; p^.nasl:=p^.nasl^.nasl dispose(pom); vymaz:=true; end else vymaz:=false;end;

Page 13: Lineárně zřetězený seznam

Vypuštění prvku ze seznamu

2. Prvek na který ukazuje ukazatel delprocedure vymaz(var s:seznam;var del:ukprvek);var pomuk:ukprvek; pomh:thodnota;begin if del<>s^.konec then begin pomuk:=del^.nasl; pomh:=del^.nasl^.hodnota; del^.nasl^.hodnota:=del^.hodnota;del^.hodnota:=pomh; del^.nasl:=del^.nasl^.nasl; dispose(pomuk); end; else begin s^.konec:=s^.celo; while s^.konec^.dalsi<>del do s^.konec:=s^.konec^.dalsi; s^.konec^.dalsi:=nil; dispose(del); end;end;