baner
home exercises theme

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();