7. Obojsmerný lineárny zoznam

7.1  Čo je to?

Obojsmerný lineárny zoznam sa od jednosmerného lineárneho zoznamu líši tým, že každý jeho uzol obsahuje dva ukazovatele:

  • ukazovateľ na nasledujúci uzol
  • ukazovateľ na predchádzajúci uzol
Samozrejme, keďže prvý uzol zoznamu nemá predchodcu a posledný uzol zoznamu nemá zase nasledovníka, hodnoty príslušných ukazovateľov sú NULL.


Nový údajový typ pre uzly obojsmerného lineárneho zoznamu celých čísel definujeme napr. takto:

typedef struct uzol {
  int hodnota;
  struct uzol *nasled;
  struct uzol *predch;
} TUzol;
Graficky by sme mohli túto dynamickú štruktúru reprezentovať takto:

Výhody obojsmerného lineárneho zoznamu:

  • môžeme ho prezerať oboma smermi (od začiatku aj od konca)
  • okrem nasledovníka máme prístup vždy aj k predchodcovi aktuálneho prvku (t.j. toho, na ktorý práve ukazuje smerník).
Pri riešení mnohých úloh sa aj zásobník či rad môžu implementovať ako obojsmerné linárne zoznamy!


Precvičme si

  Vytvorte program, ktorý umožní vo forme menu pracovať s obojsmerným lineárnym zoznamom (vytvorenie zoznamu; pridávanie nových prvkov na koniec; odoberanie prvkov, ktoré vyhovujú nejakej podmienke; výpis prvkov zoznamu oboma smermi; vloženie prvku do vnútra zoznamu). Prvkami zoznamu nech sú celé čísla.

[Riešenie]

  Napíšte program, ktorý načíta zo vstupu reťazec znakov ukončený bodkou, ktorý po znakoch uloží do obojsmerného lineárneho zoznamu, a následne overí, či je zadaný reťazec palindrom (t.j. či je rovnaký odpredu i odzadu).

[Riešenie]