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óna |
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:
- Ak chcete používať jeho funkcie, zahrňte hlavičkový súbor iostream alebo do nášho kódu.
- 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.
- Zahrňte do nášho kódu menný priestor std, aby ste mohli používať jeho triedy bez toho, aby ste ho volali.
- Zavolajte funkciu main(). Do tejto funkcie by mala byť pridaná programová logika.
- Vytvorte zásobník na ukladanie celočíselných hodnôt.
- Na vloženie hodnoty 21 do zásobníka použite funkciu push().
- Pomocou funkcie push() vložte hodnotu 22 do zásobníka.
- Pomocou funkcie push() vložte hodnotu 24 do zásobníka.
- Pomocou funkcie push() vložte hodnotu 25 do zásobníka.
- 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.
- Na vloženie hodnoty premennej num použite funkciu push().
- Pomocou funkcie pop() odstráňte horný prvok zo zásobníka, teda 25. Vrchný prvok sa teraz zmení na 24.
- Pomocou funkcie pop() odstráňte horný prvok zo zásobníka, teda 24. Vrchný prvok sa teraz zmení na 22.
- 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čí.
- Tlač aktuálneho obsahu stohu na konzole.
- Zavolajte funkciu pop() na zásobníku.
- Koniec tela slučky while.
- 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