logo

Zásobník v C++ STL

Stohy sú typom kontajnerových adaptérov s typom fungovania LIFO (Last In First Out), kde sa nový prvok pridáva na jeden koniec (hore) a prvok sa odstraňuje iba z tohto konca. Stack používa zapuzdrený objekt oboch vektor alebo deque (štandardne) resp zoznam (trieda sekvenčného kontajnera) ako jeho základný kontajner, ktorý poskytuje špecifickú sadu členských funkcií na prístup k jeho prvkom.

typy spojení v rdbms

Ak existuje zmätok pri zapamätaní si základného rozdielu medzi zásobníkom a radom, potom si vezmite skutočný príklad tohto rozlíšenia, pre stohovanie, stohovanie kníh môžeme ľahko vziať hornú knihu a zapamätať si, kedy musíte stáť v rade vpredu bankomatu na výber hotovosti, potom má prvá osoba v blízkosti bankomatu prvú šancu vybrať peniaze z bankomatu. Front je teda typu FIFO (First In First Out).



Syntax zásobníka:-

Na vytvorenie zásobníka musíme do nášho kódu zahrnúť hlavičkový súbor. Túto syntax potom použijeme na definovanie std::stack:

šablónazásobník triedy;

Typ – je typ prvku obsiahnutého v std::stack. Môže to byť akýkoľvek platný typ C++ alebo dokonca typ definovaný používateľom.



Kontajner – je typ základného kontajnerového objektu.

Typy členov: -

value_type- Prvý parameter šablóny, T. Označuje typy prvkov.



container_type- Druhý parameter šablóny, kontajner. Označuje základný typ kontajnera.

size_type- Integrálny typ bez znamienka.

Funkcie spojené so zásobníkom sú:
empty() – Vráti, či je zásobník prázdny – Časová zložitosť: O(1)
size() – Vráti veľkosť zásobníka – Časová zložitosť: O(1)
top() – Vráti odkaz na najvyšší prvok zásobníka – Časová zložitosť: O(1)
push(g) – Pridá prvok „g“ na vrch zásobníka – Časová zložitosť: O(1)
pop() – Vymaže posledný zadaný prvok zásobníka – Časová zložitosť: O(1)

C++




#include> #include> using> namespace> std;> int> main() {> >stack<>int>>zásobník;> >stack.push(21);>// The values pushed in the stack should be of the same data which is written during declaration of stack> >stack.push(22);> >stack.push(24);> >stack.push(25);> >int> num=0;> >stack.push(num);> >stack.pop();> >stack.pop();> >stack.pop();> > >while> (!stack.empty()) {> >cout << stack.top() <<>' '>;> >stack.pop();> >}> }>

java plátok
>

>

Výkon

22 21>

Časová zložitosť: Časová zložitosť tohto programu je O(N), kde N je celkový počet prvkov v zásobníku. Cyklus while iteruje N-krát, pričom vyberá prvky zo zásobníka a tlačí ich.

Zložitosť priestoru: Priestorová zložitosť tohto programu je O(N), kde N je celkový počet prvkov v zásobníku. Dátová štruktúra zásobníka využíva priestor úmerný počtu prvkov, ktoré sú v nej uložené. V tomto prípade je maximálna veľkosť zásobníka 5, takže priestorová zložitosť je konštantná a možno ju považovať aj za O(1).

Vysvetlenie kódu:

  1. Ak chcete používať jeho funkcie, zahrňte hlavičkový súbor iostream alebo do nášho kódu.
  2. Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli používať jeho funkcie, ak sú už zahrnuté, potom nie je potrebný súbor hlavičky zásobníka, pretože už má v sebe zabudovanú funkciu.
  3. Zahrňte do nášho kódu menný priestor std, aby ste mohli používať jeho triedy bez toho, aby ste ho volali.
  4. Zavolajte funkciu main(). Do tejto funkcie by mala byť pridaná programová logika.
  5. Vytvorte zásobník na ukladanie celočíselných hodnôt.
  6. Na vloženie hodnoty 21 do zásobníka použite funkciu push().
  7. Pomocou funkcie push() vložte hodnotu 22 do zásobníka.
  8. Pomocou funkcie push() vložte hodnotu 24 do zásobníka.
  9. Pomocou funkcie push() vložte hodnotu 25 do zásobníka.
  10. Na zadanie hodnoty premennej použite celočíselnú premennú num. Tu je jeho hodnota 0, ale pomocou cin>> num môžeme priradiť akúkoľvek celočíselnú hodnotu.
  11. Na vloženie hodnoty premennej num použite funkciu push().
  12. Pomocou funkcie pop() odstráňte horný prvok zo zásobníka, teda 25. Vrchný prvok sa teraz zmení na 24.
  13. Pomocou funkcie pop() odstráňte horný prvok zo zásobníka, teda 24. Vrchný prvok sa teraz zmení na 22.
  14. Pomocou cyklu while a funkcie empty() skontrolujte, či zásobník NIE JE prázdny. ! je operátor NOT. Takže, keď zásobník nie je prázdny, funkcia empty() vráti hodnotu false a operátor NOT ju prevedie na hodnotu true a cyklus while bude pokračovať. Keď sa však zásobník vyprázdni, funkcia empty() vráti hodnotu true a operátor NOT ju nastaví na hodnotu false a cyklus sa skončí.
  15. Tlač aktuálneho obsahu stohu na konzole.
  16. Zavolajte funkciu pop() na zásobníku.
  17. Koniec tela slučky while.
  18. Koniec tela funkcie main().

Zoznam funkcií zásobníka:

  • stack::top() v C++ STL
  • stack::empty() a stack::size() v C++ STL
  • stack::push() a stack::pop() v C++ STL
  • stack::swap() v C++ STL
  • stack::emplace() v C++ STL
  • Najnovšie články o C++ Stack