Wie verwalte ich eine vollständige kreisförmige Ereigniswarteschlange in C++?

WBOY
Freigeben: 2023-09-04 18:41:03
nach vorne
1066 Leute haben es durchsucht

Einführung

Circular Queue ist eine Verbesserung der linearen Warteschlange, die eingeführt wurde, um das Problem der Speicherverschwendung in linearen Warteschlangen zu lösen. Zirkuläre Warteschlangen nutzen das FIFO-Prinzip, um Elemente daraus einzufügen und daraus zu löschen. In diesem Tutorial besprechen wir den Betrieb einer zirkulären Warteschlange und deren Verwaltung.

Was ist eine kreisförmige Warteschlange?

Circular Queue ist eine andere Art von Warteschlange in der Datenstruktur, bei der das Front-End und das Back-End miteinander verbunden sind. Er wird auch als Ringpuffer bezeichnet. Sie funktioniert ähnlich wie eine lineare Warteschlange. Warum müssen wir also eine neue Warteschlange in die Datenstruktur einführen?

Wenn Sie eine lineare Warteschlange verwenden und die Warteschlange ihr maximales Limit erreicht, ist möglicherweise etwas Speicherplatz vor dem Endzeiger vorhanden. Dies führt zu Speicherverlust und ein guter Algorithmus sollte in der Lage sein, die Ressourcen voll auszunutzen.

Um das Problem der Speicherverschwendung zu lösen, haben Entwickler das Konzept der zirkulären Warteschlange eingeführt, das eine zirkuläre Verbindung zum Backend und Frontend herstellen und weitere Elemente einfügen kann.

Wie verwalte ich eine vollständige kreisförmige Ereigniswarteschlange in C++?

Grundfunktionen der kreisförmigen Warteschlange

  • Post- Gibt den Postwert der Warteschlange zurück.

  • Front- Gibt den vorderen Wert der Warteschlange zurück.

  • deQueue– Diese integrierte Methode wird verwendet, um Elemente aus der Warteschlange zu entfernen und gleichzeitig zu prüfen, ob die Warteschlange leer ist.

  • enQueue− Diese Methode wird verwendet, um neue Elemente einzufügen und gleichzeitig die Warteschlangengröße zu überprüfen.

In einer zirkulären Warteschlange werden Elemente aus dem Backend hinzugefügt und aus dem Frontend entfernt. deQueue und enQueue sind von der Warteschlangengröße unabhängige Funktionen und werden mithilfe des Modulo-Operators implementiert. Ihre Zeitkomplexität beträgt O(1).

Zirkuläre Warteschlange verwalten

Wir verwalten zirkuläre Warteschlangen mithilfe von enQueue- und deQueue-Operationen. Anfänglich ist der vordere Wert der Ringwarteschlange 0, der hintere Wert -1 und alle Elemente in der Ringwarteschlange sind NULL.

Beispiel

C++-Code, der Arrays verwendet, um eine kreisförmige Warteschlange zu implementieren

#include  using namespace std; class Queue { //Initializing front and rear of the queue int rear, front; int sz; int* arr; public: Queue(int s) { front = rear = -1; sz = s; arr = new int[s]; } void enQueue(int v); int deQueue(); void displayQueue(); }; //Circular queue function void Queue::enQueue(int v) { if ((front == 0 && rear == sz - 1) || (rear == (front - 1) % (sz - 1))) { printf("\nNo Space Queue is Full"); return; } //Inserting the front element else if (front == -1) { front = rear = 0; arr[rear] = v; } else if (rear == sz - 1 && front != 0) { rear = 0; arr[rear] = v; } else { rear++; arr[rear] = v; } } //Function for deleting queue elements int Queue::deQueue() { if (front == -1) { printf("\nQueue needs data it is empty"); return INT_MIN; } int ele = arr[front]; arr[front] = -1; if (front == rear) { front = -1; rear = -1; } else if (front == sz - 1) front = 0; else front++; return ele; } //Printing Circular queue elements void Queue::displayQueue() { if (front == -1) { printf("\nQueue Empty"); return; } printf("\nCircular Queue elements are: \n"); if (rear >= front) { for (int i = front; i <= rear; i++) printf("%d ", arr[i]); } else { for (int i = front; i < sz; i++) printf("%d ", arr[i]); for (int i = 0; i <= rear; i++) printf("%d ", arr[i]); } } int main() { Queue q(5); //Pushing data in circular queue q.enQueue(10); q.enQueue(20); q.enQueue(3); q.enQueue(5); //Printing circular queue elements q.displayQueue(); //Deleting front elements of circular queue printf("\nDeleted element = %d\n", q.deQueue()); printf("\nDeleted element = %d", q.deQueue()); q.displayQueue(); q.enQueue(13); q.enQueue(27); q.enQueue(50); q.displayQueue(); q.enQueue(22); return 0; }
Nach dem Login kopieren

Ausgabe

Circular Queue elements are: 10 20 3 5 Deleted element = 10 Deleted element = 20 Circular Queue elements are: 3 5 Circular Queue elements are: 3 5 13 27 50 No Space Queue is Full
Nach dem Login kopieren

Fazit

Zirkuläre Warteschlangen werden bei der Speicherverwaltung und CPU-Planung verwendet. Es verwendet die Funktion displayQueue(), um Warteschlangenelemente anzuzeigen.

Wir sind am Ende dieses Tutorials angelangt. Ich hoffe, dieses Tutorial hat Ihnen geholfen zu verstehen, wie man eine kreisförmige Warteschlange implementiert.

Das obige ist der detaillierte Inhalt vonWie verwalte ich eine vollständige kreisförmige Ereigniswarteschlange in C++?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!