1. Úvod

V prvej časti učebnice sme základné vlastnosti ukazovateľov zväčša vysvetľovali na príkladoch, keď statická premenná typu ukazovateľ sprístupňovala jedinú dynamickú premennú. Takéto použitie ukazovateľov však nemá praktický význam, pretože využiteľných dynamických premenných môže byť maximálne rovnaký počet ako deklarovaných premenných typu ukazovateľ.

Praktický význam nadobúdajú ukazovatele až vtedy, keď sú dynamické premenné sprístupňované ukazovateľmi v iných dynamických premenných. Tak vzniká dynamická údajová štruktúra.


Typickým príkladom dynamickej údajovej štruktúry je zoznam prvkov určitého typu, ktorý môže byť rozširovaný operáciou „pridaj nový prvok“. Ak je táto operácia definovaná tak, že rozširuje zoznam stále na jednom konci a je možné obmedziť maximálny rozsah zoznamu, môžeme túto údajovú štruktúru reprezentovať pomocou poľa deklarovaného takto:
 
TypPrvku Zoznam[MaxPocetPrvkov];

Ak však definujeme operáciu pridania prvku všeobecnejšie, napr. tak, že pripustíme vkladanie prvku aj do vnútra zoznamu, ukáže sa takáto reprezentácia ako nevýhodná:

Ak chceme umiestniť nový prvok inam, než na koniec poľa, vyžaduje si to uvoľnenie príslušnej pozície v poli presunom časti poľa o jedno miesto vpravo. Podobný problém vzniká aj keď chceme nejaký prvok z poľa odstrániť! Pole by mohlo mať i niekoľko tisíc prvkov a takýto sekvenčný posun by mohol znamenať zbytočné spomalenie algoritmu.


Operácie, ktorými meníme rozsah dynamickej údajovej štruktúry sa realizujú omnoho efektívnejšie, ak je reprezentácia údajovej štruktúry vytvorená pomocou ukazovateľov.
 
Grafické znázornenie takto reprezentovaného zoznamu je na obrázku:




Každý prvok „zreťazeného“ zoznamu je uložený v samostatnom objekte (dynamickej premennej), ktorého súčasťou je okrem hodnoty prvku taktiež položka obsahujúca ukazovateľ na objekt, v ktorom je uložený ďalší prvok zoznamu.

Na obrázku je tiež znázornená operácia vloženia nového prvku. Realizuje sa takto:

  • Vytvorí sa objekt, ktorý obsahuje hodnotu nového prvku a ukazovateľ na objekt, pred ktorý sa zaraďuje
  • Zmení sa ukazovateľ v tom objekte, za ktorý sa nový prvok zaraďuje

Rozsah takto reprezentovanej dynamickej štruktúry (t. j. v našom prípade počet prvkov zoznamu) je možné v programe ľubovoľne meniť – prvky (dynamické premenné) do zoznamu môžeme podľa momentálnej potreby pridávať a odoberať. Vyhneme sa tak zbytočnému zaťažovaniu pamäte.

Niekto by mohol namietať, že pamäťou už netreba šetriť, keďže vďaka rýchlemu vývoju v oblasti hardvéru je operačnej pamäte k dispozícii dosť. Neplatí to však všeobecne, preto by nebolo múdre spoliehať sa na to. Nie vždy sa dá totiž vopred s istotou predpovedať, aké pamäťové nároky bude mať naša aplikácia v reálnych podmienkach – aké množstvo dát bude musieť spracovať, koľko požiadaviek obslúžiť a pod. Dynamická alokácia pamäte spolu s ukazovateľmi sú teda pre programátora skutočne silnými nástrojomi a stojí za to vedieť ich efektívne použiť – najmä pri práci s dynamickými údajovými štruktúrami.