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
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
type
ukprvek=^prvek;
prvek=record
hodnota:thodnota;
nasl:ukprvek;
end;
seznam=record
celo,konec:ukprvek;
end;
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
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;
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
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;
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;
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;
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;
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;
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;
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;