Spojový seznam

Na cvičení byla představena datová struktura známá jako dvojsměrný spojový seznam. Jde o dynamickou struktutu, což znamená, že počet prvků, které si do seznamu uložíme není třeba předem znát.

Je možné prvky do/ze struktury přidávat/odebírat za běhu programu. Tyto operace jsou realizovány pomocí vhodného přepojení ukazatelů.

Obousměrný spojový seznam

Existují i další varianty spojových seznamů např. jednosměrné nebo cyklické.

Pointery

Představili jsme si z teoretické i praktické stránky datový typ ukazatel/pointer. Několik základních věcí, které je dobré o pointerech vědět:

  • + pointer je proměnná, která obsahuje adresu nějakého místa v paměti
  • + pointery mohou mít udaný typ - podle typu pointeru překladač pozná, jak velké to místo v paměti je
  • + pointer, který nikam neukazuje by měl mít hodnotu nil
  • + při práci s pointry je třeba dávat pozor:
    • * odkud data čteme
    • * kam data zapisujeme

Byla probrána syntaxe pointerů, používaná v Pascalu (^,nil,@).

  • 1. deklarace typu pointer: type Pint = ^integer;
  • 2. deklarace proměnné typu pointer: var ui: Pint; (což je ekvivalentní s var ui: ^integer;)
  • 3. inicializace prázdného pointeru: ui := nil;
  • 4. inicializace pointeru adresou existující proměnné: ui := @i;
  • 5. zápis přes pointer (na místo kam pointer ukazuje): (ui^) := 42;
  • 6. čtení přes pointer (z místa kam pointer ukazuje): x := (ui^);

Na příkladu bylo prakticky demonstrováno, jak lze syntaxi použít, zneužít a jak snadno docílíme běhové chyby 216.

Na následujícím obrázku je zachycen pes, který je shodou okolností také pointr. Kromě toho se cvičením nijak nesouvisí.
ukazatel na typ lovná zvěř

Práce s dynamicky alokovanou pamětí

Byl popsán způsob, jakým lze v Pascalu alokovat a odalokovat paměť:

  • 1. deklarujeme proměnnou typu pointer (např. ui - viz. výše)
  • 2. alokujeme paměť: New(ui); (procedura New uloží do pointeru adresu přidělené paměti)
  • 3. pokud už přidělenou paměť nepotřebujeme, uvolníme ji: Dispose(ui);

Uspořádaný spojový seznam

V CodExu je zadán příklad na procvičení práce s pointery. Je ohodnocen 15 body.