1 / 13

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. Lineárně zřetězený seznam příklad. začátek. Definice typu seznam. t ype

libby
Download Presentation

Lineárně zřetězený seznam

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Lineárně zřetězený seznampříklad začátek

  3. Definice typu seznam type ukprvek=^prvek; prvek=record hodnota:thodnota; nasl:ukprvek; end; seznam=record celo,konec:ukprvek; end;

  4. začátek p X Vkládání do seznamu • Na začátek procedure 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;

  5. Vkládání do seznamu • Na konec procedure 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;

  6. za p 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;

  7. 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; begin new(p); pom:=před^.hodnota; před^.hodnota:=x; p^.hodnota:=pom; p^.nasl:=před^.nasl; před^.nasl:=p; end;

  8. 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;

  9. 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); whilex<>koncova_hodnota do begin vloz_k(s,x); read(x); end; end;

  10. 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;

  11. 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épe function 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:=true else p:=p^.nasl; hledej:=p; end;

  12. Vypuštění prvku ze seznamu • Prvek s hodnotou x function 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;

  13. Vypuštění prvku ze seznamu • Prvek na který ukazuje ukazatel del procedure 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;

More Related