Datová struktura “stack”
C++ 11

image_printTisk

Datová struktura zásobník funguje na principu zvaném LIFO (Last In First Out). To znamená, že položka, která do něj byla vložena poslední,  je jako první vyjmuta. V podstatě můžeme říci, že pomocí zásobníku můžeme vyjímat prvky v opačném pořadí, než v jakém jsme je vkládali.

Deklarace

Zásobník se deklaruje způsobem, jak je ukázáno na následujícím příkladu.

#include <stack>
#include <string>
using namespace std;

struct Employee {
    string name;
    int wage;
};

int main() {
    stack<int> intStack;
    stack<Employee> empStack;
    return 0;
}

První musíme vložit hlavičkový soubor <stack>, kde je šablona zásobníku definována. Potom už můžeme vytvořit zásobník pro libovolný datový typ, ať již primitivní nebo uživatelsky definovaný, jak je uvedeno na příkladu.

Užití

Mezi nepoužívanější metody pro zásobník patří metoda push(), pomocí které se prvky do zásobníku vkládají. Položku na vrcholu zásobníku můžeme získat pomocí metody top(). Následné vyjmutí prvku ze zásobníku se provádí pomocí metody pop(). Pokud potřebujete podrobnější informace o této datové struktuře, můžete je najít na:

Seznam metod

size


Metoda size() vrací počet položek, které jsou v zásobníku obsaženy.

#include &lt;iostream&gt;
#include &lt;stack&gt;
using namespace std;

int main() {
    stack&lt;int&gt; st;
    st.push(1);
    st.push(3);
    st.push(4);
    
    cout &lt;&lt; st.size() &lt;&lt; endl;
}
Unable to connect to the JDoodle service.

Na příkladu jsou vloženy do zásobníku tři čísla a pak je počet položek v něm vypsán na výstup.

empty


Metoda empty() vrátí kladnou logickou hodnotu true, pokud je zásobník prázdný a false, pokud ne.

top


Metoda top vrací prvek na vrcholu zásobníku.

push a pop


Metoda push() vkládá na vrchol zásobníku nový prvek předaný v argumentu funkce. Opačnou operaci vyjmutí se provádí pomocí metody pop(), která vyjme prvek z vrcholu zásobníku. Tato metoda je ale deklarovaná jako void a prvek nevrací. K tomu je třeba napřed použít metodu top().

#include &lt;iostream&gt;
#include &lt;stack&gt;
using namespace std;

int main() {
    stack&lt;int&gt; st;
    st.push(1);
    st.push(2);
    st.push(3);
    
    while(! st.empty()) {
        cout &lt;&lt; st.top() &lt;&lt; &quot;;&quot;;
        st.pop();
    }
}
Unable to connect to the JDoodle service.

Do zásobníku jsou vloženy tři položky a po té jsou za pomocí metod top()pop() vypsány v opačném pořadí na výstup.

emplace


Vytvoří nový prvek a vloží ho do zásobníku. Na rozdíl od metody push() nevkládá existující prvek, ale vytváří nový na základě zadaných argumentů. Viz následující příklad.

#include &lt;iostream&gt;
#include &lt;stack&gt;
using namespace std;

struct Employee {
    string name;
    int wage;
    
    Employee(string n, int w): name(n), wage(w) {}
};

ostream&amp; operator&lt;&lt;(ostream&amp; os, const Employee&amp; e) {
    os &lt;&lt; &quot;Jmeno: &quot; &lt;&lt; e.name &lt;&lt; &quot;, plat: &quot; &lt;&lt; e.wage &lt;&lt; endl;
    return os;
}

int main() {
    stack&lt;Employee&gt; st;
    st.emplace(&quot;Aleš&quot;, 20000);
    st.emplace(&quot;Monika&quot;, 30000);
    st.emplace(&quot;Jaroslav&quot;, 15000);
    
    while(! st.empty()) {
        cout &lt;&lt; st.top();
        st.pop();
    }
    return 0;
}
Unable to connect to the JDoodle service.

TODO: Popis příkladu

 

 

image_printTisk
Datová struktura “stack”
C++ 11
Ohodnoťte tento článek

Související články

  • Datová struktura “queue” Fronta funguje na principu zvaném FIFO (First-In First-Out). To znamená, že prvek, který byl do fronty vložen dříve, bude také dříve zpracováván. V podstatě můžeme říci, že prvky vyjímáme […]
  • Datová struktura “priority_queue” Někdy potřebujeme jiné zpracování než sekvenční dle pořadí vložení prvků jako u klasické fronty. Řekněme, že prvky mají například číselně vyjádřenou prioritu své důležitosti a my je chceme […]
  • Aritmetika ukazatelů a pole V tomto článku si vysvětlíme, co je aritmetika ukazatelů. Ukážeme si význam a aplikaci dalších operátorů vztahujících se k ukazatelům a popíšeme si jejich vzájemné vztahy k polím různých […]
  • Pole v C++ V tomto článku si vysvětlíme nový pojem jazyka C++, a to pole nějakých hodnot. Je to jazykový konstrukt, který slouží k uchování seznamu hodnot nějakého datového typu. Je důležité zmínit, […]
  • Vícerozměrná pole Tento článek pojednává o vícerozměrných polích v jazyce C++. Seznámíme se s jejich významem, deklarací, inicializací a způsobem zápisu a čtení jejich hodnot. Na závěr článku bude zmíněno, […]
  • Práce se soubory pomocí knihovny STL V tomto článku si popíšeme základy práce se soubory pomocí knihovny STL. Práce se soubory pomocí této knihovny je mnohem snadnější, než pomocí staršího přístupu pomocí standardní knihovny […]