C++

So verwenden Sie die C++-Warteschlange

So verwenden Sie die C++-Warteschlange

Einführung

Eine Warteschlange ist eine Sammlung von Elementen, wobei das erste Element, das der Liste hinzugefügt wird, das erste Element sein muss, das als nächstes entfernt wird. Wenn Artikel zur Sammlung hinzugefügt werden, wächst sie an Größe, d.e. es wird länger. Immer wenn ein Element entfernt werden soll, muss es das erste sein, das hinzugefügt wird. Wenn Elemente kontinuierlich entfernt werden, ist das nächste entfernte Element das zweite Element; der dritte wird danach entfernt und so weiter.

Nachdem das erste Element der ursprünglichen Liste entfernt wurde, wird das zweite zum ersten Element. Nachdem das zweite Element entfernt wurde, wird das dritte zum ersten Element und so weiter.

Ein gutes Beispiel für eine Warteschlange aus der Praxis ist, wenn Menschen Schlange stehen, um auf Service oder Ware zu warten. Die erste Person wird zuerst vor der letzten bedient. Die Warteschlange, über die in diesem Tutorial gesprochen wird, ist jedoch die Software-Warteschlange, wie sie in C . entworfen wurde++.

FIFO

FIFO steht für First-In, First-Out. Es ist eine andere Art, die Warteschlange zu schätzen. Das heißt, das erste Element, das in die Liste aufgenommen wird, ist das erste Element, das entfernt wird, wenn eine Entfernung erfolgen soll. Der Anfang der Liste wird als Kopf oder Vorderseite bezeichnet; das Ende der Liste wird Rücken oder Schwanz genannt.

Grundlegende Operationen

Eine Softwarewarteschlange muss mindestens die folgenden Operationen haben:

drücken

Dieser Vorgang fügt ein neues Element am Ende der Warteschlange hinzu. Dieser Vorgang wird offiziell als Enqueue bezeichnet.

Verschiebung

Dieser Vorgang entfernt das erste Element der Warteschlange und das zweite Element wird zum neuen ersten Element. Dieser Vorgang wird offiziell Dequeue genannt. Es heißt Pop in C++.

In diesem Artikel wird erläutert, wie Sie die C++-Warteschlangendatenstruktur verwenden. Sie sollten C++-Zeiger und -Referenzen kennen, um den Rest dieses Artikels zu verstehen.

Klasse und Objekte

Eine Klasse ist ein Satz von Variablen und Funktionen, die zusammenarbeiten, wobei den Variablen keine Werte zugewiesen sind. Wenn den Variablen Werte zugewiesen werden, wird die Klasse zu einem Objekt. Unterschiedliche Werte für dieselbe Klasse führen zu unterschiedlichen Objekten; das heißt, verschiedene Objekte sind dieselbe Klasse mit unterschiedlichen Werten. Das Erstellen eines Objekts aus einer Klasse wird als Instanziieren des Objekts bezeichnet.

Der Name Queue ist eine Klasse. Ein aus der Warteschlangenklasse erstelltes Objekt hat einen vom Programmierer gewählten Namen.

Eine Funktion, die zu einer Klasse gehört, wird benötigt, um ein Objekt aus der Klasse zu instanziieren. In C++ hat diese Funktion denselben Namen wie der Name der Klasse. Objekte, die aus der Klasse erstellt (instanziiert) werden, haben unterschiedliche Namen, die ihnen vom Programmierer gegeben werden.

Ein Objekt aus der Klasse zu erstellen bedeutet, das Objekt zu konstruieren; es bedeutet auch instanziieren.

Ein C++-Programm, das die Queue-Klasse verwendet, beginnt mit den folgenden Zeilen am Anfang der Datei:

#einschließen
#einschließen
Verwenden von Namespace-Std;

Die erste Zeile ist für die Eingabe/Ausgabe. Die zweite Zeile ist, dem Programm zu erlauben, alle Funktionen der Warteschlangenklasse zu verwenden. Die dritte Zeile erlaubt dem Programm, die Namen im Standard-Namensraum zu verwenden.

Überladen einer Funktion

Wenn zwei oder mehr verschiedene Funktionssignaturen denselben Namen haben, wird dieser Name als überladen bezeichnet. Wenn eine Funktion aufgerufen wird, bestimmen die Anzahl und Art der Argumente, welche Funktion tatsächlich ausgeführt wird.

Konstruktion

Warteschlange Name()

Die folgende Deklaration instanziiert eine Warteschlange namens que vom Typ int.

Warteschlange que;

Die Warteschlange ist leer. Die Deklaration beginnt mit dem reservierten Wort, Warteschlange gefolgt von spitzen Klammern mit dem Datentyp. Dann hast du den vom Programmierer vorgegebenen Namen für die Warteschlange.

Konstruieren mit Initialisierungsliste

Die folgende Definition zeigt, wie Sie eine Warteschlange mit Initialisierungsliste erstellen:

Warteschlange que(1.1, 2.2, 3.3, 4.4);

Eine Warteschlange zerstören

Um eine Warteschlange zu zerstören, lassen Sie sie einfach aus dem Geltungsbereich.

Zugriff auf Warteschlangenelemente

push(wert)

Eine Warteschlange ist eine First-In-First-Out-Liste. Jeder Wert wird also von hinten hinzugefügt. Das folgende Codesegment erstellt eine leere Warteschlange, nach der fünf Float-Werte von hinten hinzugefügt werden:

Warteschlange que;
que.drücken(1.1);
que.drücken (2.2);
que.drücken (3.3);
que.drücken (4.4);
que.drücken(5.5);

size() const

Dies gibt die Anzahl der Elemente in der Warteschlange zurück. Der folgende Code veranschaulicht:

Warteschlange que;
que.drücken(1.1); que.drücken (2.2); que.drücken (3.3); que.drücken (4.4); que.drücken(5.5);
cout << que.size() << '\n';

Die Ausgabe ist 5.

Vorderseite()

Dies gibt einen Verweis auf das erste Element der Warteschlange zurück, ohne das Element zu entfernen. Die Ausgabe des folgenden Codes ist 1.1.

Warteschlange que;
que.drücken(1.1); que.drücken (2.2); que.drücken (3.3); que.drücken (4.4); que.drücken(5.5);
cout << que.front() << '\n';

Das Element wird nicht aus der Warteschlange entfernt.

front() const

Wenn der Warteschlangenkonstruktion const vorangeht, wird der Ausdruck „front() const“ anstelle von „front()“ ausgeführt. Es wird zum Beispiel im folgenden Code verwendet.

ständige Warteschlange que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.front() << '\n';

Es wird eine konstante Referenz zurückgegeben. Das Element wird nicht aus dem Vektor entfernt. Die Queue-Elemente können nicht geändert werden.

zurück()

Dies gibt einen Verweis auf das letzte Element der Warteschlange zurück, ohne das Element zu entfernen. Die Ausgabe des folgenden Codes ist 5.5.

Warteschlange que;
que.drücken(1.1); que.drücken (2.2); que.drücken (3.3); que.drücken (4.4); que.drücken(5.5);
cout << que.back() << '\n';

zurück() const

Wenn der Warteschlangenkonstruktion const vorangeht, wird der Ausdruck „back() const“ anstelle von „back()“ ausgeführt. Es wird zum Beispiel im folgenden Code verwendet.

ständige Warteschlange que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.back() << '\n';

Es wird eine konstante Referenz zurückgegeben. Das Element wird nicht aus der Warteschlange entfernt. Mit dem vorhergehenden const für die Queue-Konstruktion können die Elemente in der Queue nicht geändert werden.

Warteschlangenkapazität

size() const

- siehe oben

leer() const

Dies gibt 1 für wahr zurück, wenn sich keine Elemente in der Warteschlange befinden, oder 0 für falsch, wenn die Warteschlange leer ist. Der folgende Code veranschaulicht dies:

Warteschlange que1 (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que1.empty() << '\n';
Warteschlange que2;
cout << que2.empty() << '\n';

Die Ausgabe ist:

0
1

Warteschlangenmodifikatoren

Pop()

Eine Warteschlange ist FIFO, daher muss jedes Element, das entfernt werden muss, vom Anfang (Kopf) der Warteschlange entfernt werden. Diese Memberfunktion entfernt das erste Element, ohne es zurückzugeben. Der folgende Code veranschaulicht dies:

Warteschlange que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.front() << '\n';
que.Pop();
cout << que.size() << '\n';

Die Ausgabe ist:

1.1
4

ein.tauschen (b)

Zwei Queues können vertauscht werden, wie in diesem Codesegment dargestellt:

Warteschlange que1(1.1, 2.2, 3.3, 4.4, 5.5);
Warteschlange que2(10, 20);
que1.tauschen (que2);
cout << "First element and size of que1:
"<< que1.front() <<", "<< que1.size() << '\n';
cout << "First element and size of que2 "<<
que2.Vorderseite() <<", "<< que2.size() << '\n';

Die Ausgabe ist:

Erstes Element und Größe von que1: 10, 2

Erstes Element und Größe von que2: 1.fünfzehn

Beachten Sie, dass die Länge einer Warteschlange bei Bedarf erhöht wird. Auch Werte, die keine Ersetzungen hatten, werden durch einen Standardwert ersetzt. Die Datentypen müssen vom gleichen Typ sein.

Gleichheits- und relationale Operatoren für Warteschlangen

Bei gewöhnlichen Zeichen in C++ stehen in aufsteigender Reihenfolge Zahlen vor Großbuchstaben, die vor Kleinbuchstaben stehen. Das Leerzeichen kommt vor Null und alle von ihnen.

Gleichstellungsoperatoren

Gibt 1 für wahr und 0 für falsch zurück.

Der == Operator

Gibt 1 zurück, wenn die beiden Warteschlangen die gleiche Größe haben und die entsprechenden Elemente gleich sind; andernfalls gibt es 0 zurück. Beispiel:

Warteschlange que1("Art", "etwas anderes");
Warteschlange que2("böse");
int num = que1 == que2;
cout << num << '\n';

Die Ausgabe ist: 0.

Das != Betreiber

- Gegenteil von oben. Beispiel:

Warteschlange que1("Art", "etwas anderes");
Warteschlange que2("böse");
int num = que1 != que2;
cout << num << '\n';

Die Ausgabe ist: 1.

Relationale Operatoren

Gibt 1 für wahr und 0 für falsch zurück.

Das < Operator

Gibt 1 zurück, wenn die erste Warteschlange die anfängliche Teilmenge der zweiten Warteschlange ist, wobei die Elemente der beiden gleichen Teile gleich und in derselben Reihenfolge sind. Wenn beide Warteschlangen die gleiche oder unterschiedliche Größe haben und von links nach rechts bewegt wird, wird in der ersten Warteschlange ein Element angetroffen, das kleiner als das entsprechende Element in der zweiten Warteschlange ist, wird trotzdem 1 zurückgegeben. Andernfalls wird 0 zurückgegeben. Beispiel:

Warteschlange que1("Art", "etwas anderes");
Warteschlange que2("böse");
int num = que1 < que2;
cout << num << '\n';

Die Ausgabe ist 1. < does not include the case when the size and order are the same.

Der > Betreiber

- Gegenteil von oben. Beispiel:

Warteschlange que1("Art", "etwas anderes");
Warteschlange que2("böse");
int num = que1 > que2;
cout << num << '\n';

Ausgang: 0

Das <= Operator

- gleich wie < but includes the case when the size and order are the same. Example:

Warteschlange que1("Art", "etwas anderes");
Warteschlange que2("böse");
int num = que1 <= que2;
cout << num << '\n';

Ausgang: 1

Der >= Operator

- Gegenteil von oben. Beispiel:

Warteschlange que1("Art", "etwas anderes");
Warteschlange que2("böse");
int num = que1 >= que2;
cout << num << '\n';

Ausgang: 0

Klasse und ihre instanziierten Objekte

Ein Wert gehört zu einem Datentyp wie ein instanziiertes Objekt zu einer Klasse. Die Queue-Konstruktion kann auch eine Klasse als Datentyp akzeptieren. Das folgende Programm veranschaulicht dies:

#einschließen
#einschließen
Verwenden von Namespace-Std;
Klasse TheCla

Öffentlichkeit:
int-Zahl;
statisches Zeichen ch;
void func (char cha, const char *str)

cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

statischer Leerspaß (char ch)

if (ch == 'a')
cout << "Official static member function" << '\n';

;
int main()

TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
Warteschlange que;
que.push(obj1); que.push(obj2); que.push(obj3); que.push(obj4); que.push(obj5);
cout << que.size() << '\n';
0 zurückgeben;

Die Ausgabe ist 5.

Verknüpfte Liste

Die Warteschlangenliste wird technisch als verkettete Liste bezeichnet. Es gibt zwei Arten von verketteten Listen für die Warteschlange: einfach verkettete Liste und doppelt verkettete Liste.

Ein einfach verkettetes Listenelement kann durch eine Struktur aus zwei Mitgliedern implementiert werden. Ein Element enthält einen Zeiger auf das nächste Element und das andere Element enthält das Datum (Singular für Daten).

Ein doppelt verkettetes Listenelement kann durch eine Struktur aus drei Mitgliedern implementiert werden. Das mittlere Element enthält das Datum, während das erste und dritte Element Zeiger auf ihre angrenzenden Elemente halten.

Anwendungen der Warteschlange

Die Warteschlange ist eine First-in-First-out-Datenstruktur. Es gibt Situationen im Computing, in denen Daten in Form einer Warteschlange ankommen, die ein First-in-First-out-Verhalten erfordern.

Gemeinsame Nutzung von Computerressourcen

Eine Ressource in einem Computer ist eine physische oder virtuelle Komponente mit begrenzter Verfügbarkeit. Dazu gehören CPU, Grafikkarte, Festplatte und Speicher. Das Teilen einer solchen Ressource erfordert eine Warteschlange.

Umgang mit Interrupts

Computerperipheriegeräte müssen den Computer von Zeit zu Zeit unterbrechen. Die Interrupts müssen so behandelt werden, wie sie angekommen sind. Das braucht eine Warteschlange.

Informationen verwalten.

Die Warteschlange kann beispielsweise verwendet werden, um Anwendungsdateien für einen Job zu verwalten, wenn die Dateien auf dem Computer gespeichert sind.

Fazit

Eine Warteschlange ist eine Listendatenstruktur, die entweder eine einfach verknüpfte Liste oder eine doppelt verknüpfte Liste ist. In der Regel ist das erste Element, das in die Liste kommt, das erste Element, das herauskommt. C++ bietet in seiner Standardbibliothek eine Warteschlangen-Datenstruktur. Die für diese Struktur verfügbaren Kategorien von Memberfunktionen und Operatoren sind Warteschlangenkonstruktion, Warteschlangenelementzugriff, Warteschlangenkapazität, Warteschlangenmodifikatoren und Warteschlangenüberlastungsoperatoren.

Jede Warteschlangen-Datenstruktur muss mindestens die Mitgliedsfunktionen push() und pop() bereitstellen. push() bedeutet, ein neues Element am Ende der Warteschlange zu senden; und pop() bedeutet, das Element zu entfernen, das sich am Anfang der Warteschlange befindet. Leider geben diese Funktionen in C++ nicht den Wert push oder popped zurück. Um also das letzte Element vor dem Pushen zu kennen, muss die zusätzliche Funktion back() verwendet werden; und um das erste Element vor dem Popping zu kennen, muss die zusätzliche front()-Funktion verwendet werden.

Ein Wert gehört zu einem Datentyp wie ein instanziiertes Objekt zu einer Klasse. So kann eine bestimmte Klasse als Datentyp für die Instanziierung von Queue-Templates verwendet werden. Unterschiedliche Objekte für die Klasse werden zu unterschiedlichen Werten für die Klasse.

Die Warteschlange enthält Anwendungen auf dem Computer. Es kann beispielsweise verwendet werden, um Anwendungsdateien für einen Job zu verwalten, wenn die Dateien auf dem Computer gespeichert sind.

Chrys

Installieren Sie den neuesten Dolphin Emulator für Gamecube & Wii unter Linux
Mit dem Dolphin Emulator können Sie Ihre ausgewählten Gamecube- und Wii-Spiele auf Linux-Personalcomputern (PC) spielen. Als frei verfügbarer Open-So...
So verwenden Sie die GameConqueror-Cheat-Engine unter Linux
Der Artikel enthält eine Anleitung zur Verwendung der GameConqueror-Cheat-Engine unter Linux. Viele Benutzer, die Spiele unter Windows spielen, verwen...
Beste Spielkonsolen-Emulatoren für Linux
Dieser Artikel listet beliebte Spielekonsolen-Emulationssoftware auf, die für Linux verfügbar ist. Emulation ist eine Softwarekompatibilitätsschicht, ...