Queue i deque
Queue
Kolejną poznaną strukturą danych będzie kolejka, która pozwala na przechwywanie danych według kolejności ich dodawania.
Inicjowanie kolejki
Kolejkę tworzymy porzez napisanie nazwy queue
, typu danych jakie będzie przechowywać oraz nazwy:
queue<int> kolejka;
Do używania kolejki konieczne jest zaimportowanie modułu queue
:
#include <queue>
Przypisywanie danych
Dane do kolejki dodajemy przez metodę push
, która umieszcza je na końcu kolejki:
kolejka.push(3);
Odwołanie się do elementów
Kolejka róźni się od dotąd poznanych typów danych, brakiem swobodnego dostępu do wszystkich danych, a jedynie do pierwszego elementu poprzez metodę front
, np.:
kolejka.front();
Również jedynym elementem jaki można usuwać jest ten na przodzie, używa się do tego metody pop
:
kolejka.pop();
Deque
Deque (inna nazwa kolejka dwukierunkowa) jest struktórą bardzo podobną do zwykłej kolejki, jednak występuje mniedzy nimi kilka różnic.
Inicjowanie deque
Kolejkę tworzymy porzez napisanie nazwy deque
, typu danych jakie będzie przechowywać oraz nazwy:
deque<int> kolejka;
Do używania kolejki konieczne jest zaimportowanie modułu queue
:
#include <queue>
Przypisywanie danych
Dane do kolejki dodajemy przez metody push_back
oraz push_front
, które umieszczają dane odpowiednio na końcu i początku kolejki:
kolejka.push_back(7);
kolejka.push_front(2);
Odwołanie się do elementów
Podobnie do kolejki w deque nie możemy odwołać się do dowolnego elementu w kolejce, a wyłącznie do pierwszego metodą front
i ostatniego metodą back
, np.:
kolejka.front();
kolejka.back();
Możliwe jest usuwanie elementów zarówno z początku jak i końca kolejki dwukierunkowej z użyciem pop_front
i pop_back
:
kolejka.pop_front();
kolejka.pop_back();
Inne fukcje kolejki i kolejki dwukierunkowej
Wielkość kolejki możemy sprawdzić metodą size()
:
kolejka.size();
Inną przydatną metodą jest empty()
, zwracająca wartość bool
która oznacza czy kolejka jest pusta:
kolejka.empty();