Jak używać kolejki C ++

Jak używać kolejki C ++
Kolejka to zbiór elementów, w których pierwszy element dodany na liście musi być pierwszym elementem, który został usunięty następny. Tak więc, gdy przedmioty są dodawane do kolekcji, rośnie, i.mi. rośnie długość. Ilekroć jakikolwiek element ma zostać usunięty, musi być pierwszym dodanym. Jeśli elementy są usuwane w sposób ciągły, wówczas następny usunięty jest drugi element; trzeci jest później usuwany i tak dalej.

Po usunięciu pierwszej pozycji oryginalnej listy drugi staje się pierwszym elementem. Po usunięciu drugiego elementu trzeci staje się pierwszym elementem i tak dalej.

Dobrym prawdziwym przykładem kolejki jest to, że ludzie ustawiają się w kolejce, aby czekać na usługę lub dobrą. Pierwsza osoba jest doręczona pierwsza przed ostatnią. Jednak w kolejce, o której mówiono w tym samouczku, jest kolejką oprogramowania, zaprojektowaną w C++.

FIFO

FIFO stoi na pierwszym, pierwszym wyjściu. To kolejny sposób na docenienie kolejki. Oznacza to, że pierwszym elementem wprowadzonym na listę jest pierwszy element, który zostanie usunięty, ilekroć ma się odbyć usuwanie. Początek listy nazywa się głowa lub front; Koniec listy nazywa się tył lub ogon.

Niezbędne operacje

Kolejka oprogramowania musi mieć przynajmniej następujące operacje:

naciskać

Ta operacja dodaje nowy element z tyłu kolejki. Ta operacja jest oficjalnie nazywana Enqueue.

zmiana

Ta operacja usuwa pierwszy element kolejki, a drugi element staje się nowym pierwszym elementem. Ta operacja jest oficjalnie nazywana dequeue. Nazywa się to pop w c++.

W tym artykule wyjaśniono, jak korzystać z struktury danych w kolejce C ++. Powinieneś znać wskaźniki i referencje C ++, aby zrozumieć resztę tego artykułu.

Klasa i obiekty

Klasa to zestaw zmiennych i funkcji, które działają razem, w których zmienne nie mają przypisanych wartości. Gdy wartości są przypisywane do zmiennych, klasa staje się obiektem. Różne wartości podane tej samej klasie powodują różne obiekty; to znaczy różne obiekty są tą samą klasą o różnych wartościach. Mówi się, że tworzenie obiektu z klasy tworzy instancję obiektu.

Nazwa, kolejka, to klasa. Obiekt utworzony z klasy kolejki ma wybraną nazwę programisty.

Potrzebna jest funkcja, która należy do klasy, aby utworzyć obiekt z klasy. W C ++ funkcja ta ma taką samą nazwę jak nazwa klasy. Obiekty utworzone (utworzone) z klasy mają różne nazwy, przez programista.

Tworzenie obiektu z klasy oznacza konstruowanie obiektu; Oznacza to również instancje.

Program C ++, który korzysta z klasy kolejki, zaczyna się od następujących wierszy u góry pliku:

#włączać
#włączać
za pomocą przestrzeni nazw Std;

Pierwsza linia dotyczy wejścia/wyjścia. Druga wiersz ma umożliwić programowi korzystanie z wszystkich funkcji klasy kolejki. Trzeci wiersz umożliwia programowi użycie nazw w standardowej przestrzeni nazw.

Przeciążenie funkcji

Gdy dwa lub więcej różnych podpisów funkcji mają tę samą nazwę, mówi się, że ta nazwa jest przeciążona. Po wywołaniu jednej funkcji, liczba i rodzaj argumentów, określ, która funkcja jest faktycznie wykonywana.

Budowa

kolejka nazwa()

Poniższa deklaracja tworzy kolejkę o nazwie, Que typu int.

kolejka Que;

Kolejka jest pusta. Deklaracja zaczyna się od zarezerwowanego słowa, kolejki, a następnie nawiasy kątowe z typem danych. Następnie masz nazwisko programistów do kolejki.

Konstruowanie z listą inicjalizatora

Poniższa definicja pokazuje, jak utworzyć kolejkę z listą inicjalizatora:

kolejka Que (1.1, 2.2, 3.3, 4.4);

Niszczenie kolejki

Aby zniszczyć kolejkę, po prostu pozwól jej wyjść z zakresu.

Dostęp do elementu kolejki

push (wartość)

Kolejka to lista pierwszych w pierwszej kolejności. Tak więc każda wartość jest dodawana z tyłu. Poniższy segment kodu tworzy pustą kolejkę, po czym z tyłu dodaje się pięć wartości pływakowych:

kolejka Que;
Que.push (1.1);
Que.push (2.2);
Que.push (3.3);
Que.push (4.4);
Que.push (5.5);

rozmiar () const

Zwraca to liczbę elementów w kolejce. Poniższy kod ilustruje:

kolejka Que;
Que.push (1.1); Que.push (2.2); Que.push (3.3); Que.push (4.4); Que.push (5.5);
Cout << que.size() << '\n';

Wyjście to 5.

przód()

Zwraca to odniesienie do pierwszego elementu kolejki, bez usuwania elementu. Wyjście następującego kodu to 1.1.

kolejka Que;
Que.push (1.1); Que.push (2.2); Que.push (3.3); Que.Push (4.4); Que.push (5.5);
Cout << que.front() << '\n';

Element nie jest usuwany z kolejki.

front () const

Gdy konstrukcja kolejki jest poprzedzona const, wyrażenie „front () const” jest wykonywane zamiast „front ()”. Jest używany na przykład w następującym kodzie.

Kolejka const Que (1.1, 2.2, 3.3, 4.4, 5.5);
Cout << que.front() << '\n';

Zwracane jest stałe odniesienie. Element nie jest usuwany z wektora. Nie można zmienić elementów kolejki.

z powrotem()

Zwraca to odniesienie do ostatniego elementu kolejki, bez usuwania elementu. Wyjście następującego kodu to 5.5.

kolejka Que;
Que.push (1.1); Que.push (2.2); Que.push (3.3); Que.Push (4.4); Que.push (5.5);
Cout << que.back() << '\n';

back () const

Gdy konstrukcja kolejki jest poprzedzona const, wyrażenie „back () const” jest wykonywane zamiast „back ()”. Jest używany na przykład w następującym kodzie.

Kolejka const Que (1.1, 2.2, 3.3, 4.4, 5.5);
Cout << que.back() << '\n';

Zwracane jest stałe odniesienie. Element nie jest usuwany z kolejki. Z poprzednią konstrukcją dla konstrukcji kolejki, elementów w kolejce nie można zmienić.

Pojemność kolejki

rozmiar () const

- patrz wyżej

pusta () const

Zwraca 1 dla true, jeśli nie ma elementów w kolejce, lub 0 dla fałszu, jeśli kolejka jest pusta. Poniższy kod to ilustruje:

kolejka que1 (1.1, 2.2, 3.3, 4.4, 5.5);
Cout << que1.empty() << '\n';
kolejka Que2;
Cout << que2.empty() << '\n';

Wyjście to:

0
1

Modyfikatory kolejki

Muzyka pop()

Kolejka to FIFO, więc każdy element, który należy usunąć, musi zostać usunięty z górnej (głowy) kolejki. Ta funkcja członka usuwa pierwszy element bez zwracania. Poniższy kod to ilustruje:

kolejka Que (1.1, 2.2, 3.3, 4.4, 5.5);
Cout << que.front() << '\n';
Que.Muzyka pop();
Cout << que.size() << '\n';

Wyjście to:

1.1
4

A.zamiana (b)

Dwie kolejki można zamienić, jak pokazano w tym segmencie kodu:

kolejka que1 (1.1, 2.2, 3.3, 4.4, 5.5);
kolejka que2 (10, 20);
Que1.swap (que2);
Cout << "First element and size of que1:"
<< que1.front() <<", "<< que1.size() << '\n';
Cout << "First element and size of que2 "<<
Que2.przód() <<", "<< que2.size() << '\n';

Wyjście to:

Pierwszy element i rozmiar Que1: 10, 2

Pierwszy element i rozmiar Que2: 1.1, 5

Zauważ, że długość kolejki jest zwiększona w razie potrzeby. Ponadto wartości, które nie miały zamienników, są zastępowane pewną wartością domyślną. Typy danych muszą być tego samego typu.

Operatorzy równości i relacyjnych dla kolejek

W przypadku zwykłych znaków w C ++, w kolejności rosnącej liczby pojawiają się przed wielkimi literami, które pojawiają się przed małymi literami. Postać kosmiczna pojawia się przed zero i wszystkie z nich.

Operatorzy równości

Zwraca 1 dla True i 0 dla fałszu.

Operator ==

Zwraca 1, jeśli dwie kolejki mają ten sam rozmiar, a odpowiednie elementy są równe; W przeciwnym razie zwraca 0. Przykład:

kolejka que1 („kind”, „coś innego”);
kolejka que2 („Wicked”);
int num = que1 == que2;
Cout << num << '\n';

Wyjście to: 0.

!= Operator

- przeciwieństwo powyższego. Przykład:

kolejka que1 („kind”, „coś innego”);
kolejka que2 („Wicked”);
int num = que1 != que2;
Cout << num << '\n';

Wyjście to: 1.

Operatorzy relacyjni

Zwraca 1 dla True i 0 dla fałszu.

< Operator

Zwraca 1, jeśli pierwsza kolejka jest początkowym podzbiorem drugiej kolejki, przy czym elementy dwóch równych porcji są takie same i w tej samej kolejności. Jeśli obie kolejki mają ten sam rozmiar lub różne rozmiary, a przechodzenie od lewej do prawej, w pierwszej kolejce, która jest mniejsza niż odpowiedni element w drugiej kolejce, 1 będzie nadal zwracany 1. W przeciwnym razie 0 zostanie zwrócone. Przykład:

kolejka que1 („kind”, „coś innego”);
kolejka que2 („Wicked”);
int num = que1 < que2;
Cout << num << '\n';

Wyjście to 1. < does not include the case when the size and order are the same.

Operator>

- przeciwieństwo powyższego. Przykład:

kolejka que1 („kind”, „coś innego”);
kolejka que2 („Wicked”);
int num = que1> que2;
Cout << num << '\n';

Wyjście: 0

<= Operator

- taki sam jak < but includes the case when the size and order are the same. Example:

kolejka que1 („kind”, „coś innego”);
kolejka que2 („Wicked”);
int num = que1 <= que2;
Cout << num << '\n';

Wyjście: 1

> = Operator

- przeciwieństwo powyższego. Przykład:

kolejka que1 („kind”, „coś innego”);
kolejka que2 („Wicked”);
int num = que1> = que2;
Cout << num << '\n';

Wyjście: 0

Klasa i jej instanowane obiekty

Wartość jest dla typu danych, ponieważ obiekt utworzony jest w klasie. Konstrukcja kolejki może również zaakceptować klasę jako typ danych. Poniższy program ilustruje to:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
klasa thecla

publiczny:
int num;
STATICA CH Ch;
void Func (Char Cha, const char *str)
Cout << "There are " << num << " books worth " <<
Cha << str << " in the store." << '\n';

Static void Fun (char c)
if (ch == 'a')
Cout << "Official static member function" << '\n';

;
int main ()
Thecla obj1; Thecla obj2; Thecla obj3; Thecla obj4; Thecla obj5;
kolejka Que;
Que.push (obj1);
Que.push (obj2);
Que.push (obj3);
Que.push (obj4);
Que.push (obj5);
Cout << que.size() << '\n';
powrót 0;

Wyjście to 5.

Połączona lista

Lista kolejki jest technicznie nazywana listą połączoną. Istnieją dwa rodzaje powiązanych list kolejki: pojedynczo połączona lista i podwójnie połączona lista.

Struktura dwóch członków może zaimplementować pojedynczo połączony element listy. Jeden członek trzyma wskaźnik do następnego elementu, a drugi członek przechowuje odniesie (osobliwe dla danych).

Podwójnie połączony element listy może być zaimplementowany przez strukturę trzech członków. Środkowy członek posiada odniesienia, podczas gdy pierwszy i trzeci członkowie trzymają wskazówki do sąsiednich elementów.

Zastosowania kolejki

Kolejka jest pierwszą w pierwszej strukturze danych. W obliczeniach są sytuacje, gdy dane pojawiają się w postaci kolejki, wymagające zachowania pierwszego w pierwszym miejscu.

Udostępnianie zasobów komputerowych

Zasób na komputerze to dowolny fizyczny lub wirtualny element ograniczonej dostępności. Obejmują one procesor, kartę graficzną, dysk twardy i pamięć. Dzielenie się takim zasobem wymaga kolejki.

Radzenie sobie przerwań

Peryferały komputerowe muszą od czasu do czasu przerwać komputer. Przerwiki muszą być obsługiwane w taki sam sposób, jak przybyły. To wymaga kolejki.

Zarządzaj informacjami.

Kolejkę można użyć na przykład do zarządzania plikami aplikacji do zadania, jeśli pliki są przechowywane w komputerze.

Wniosek

Kolejka to struktura danych listy, która jest albo pojedynczo połączoną listą lub podwójnie połączoną listą. Z reguły pierwszym elementem, który wchodzi na listę, jest pierwszym elementem, który wyszedł. C ++ zapewnia strukturę danych kolejki w standardowej bibliotece. Kategorie funkcji członków i operatorów dostępnych dla tej struktury to budowa kolejki, dostęp do elementów kolejki, pojemność kolejki, modyfikatory kolejki i operatorzy przeciążonych kolejek.

Każda struktura danych kolejki musi zapewnić co najmniej funkcje członka push () i pop (). push () oznacza, wysyłając nowy element z tyłu kolejki; i pop () oznacza, usuwanie elementu, który znajduje się z przodu kolejki. Niestety, w C ++ funkcje te nie zwracają wartości popchanej ani wyskakującej. Aby więc poznać ostatni element przed naciskiem, należy użyć funkcji Extra Back (); i aby poznać pierwszy element przed wyspaniem, należy użyć funkcji dodatkowej ().

Wartość jest dla typu danych, ponieważ obiekt utworzony jest w klasie. Dlatego konkretna klasa może być używana jako typ danych dla instancji szablonu kolejki. Różne obiekty dla klasy stają się jak różne wartości dla klasy.

Kolejka ma aplikacje na komputerze. Można go na przykład użyć do zarządzania plikami aplikacji do zadania, jeśli pliki są przechowywane w komputerze.