Maison> développement back-end> C++> le corps du texte

Comment gérer une file d'attente circulaire complète d'événements en C++ ?

WBOY
Libérer: 2023-09-04 18:41:03
avant
1071 Les gens l'ont consulté

Présentation

Circular Queue est une amélioration de la file d'attente linéaire, qui a été introduite pour résoudre le problème du gaspillage de mémoire dans la file d'attente linéaire. Les files d'attente circulaires utilisent le principe FIFO pour y insérer et supprimer des éléments. Dans ce tutoriel, nous aborderons le fonctionnement d'une file d'attente circulaire et comment la gérer.

Qu'est-ce qu'une file d'attente circulaire ?

La file d'attente circulaire est un autre type de file d'attente dans la structure de données où le front-end et le back-end sont connectés l'un à l'autre. Il est également connu sous le nom de tampon circulaire. Il fonctionne de la même manière qu’une file d’attente linéaire, alors pourquoi devons-nous introduire une nouvelle file d’attente dans la structure des données ?

Lors de l'utilisation d'une file d'attente linéaire, lorsque la file d'attente atteint sa limite maximale, il peut y avoir de l'espace mémoire avant le pointeur de queue. Cela entraîne une perte de mémoire et un bon algorithme devrait être capable d’utiliser pleinement les ressources.

Pour résoudre le problème du gaspillage de mémoire, les développeurs ont introduit le concept de file d'attente circulaire, qui a la capacité de se lier de manière circulaire au backend et au frontend, et peut insérer plus d'éléments.

Comment gérer une file dattente circulaire complète dévénements en C++ ?

Fonctions de base de la file d'attente circulaire

  • Post- Il renvoie la valeur de publication de la file d'attente.

  • Front- Il renvoie la valeur avant de la file d'attente.

  • deQueue- Cette méthode intégrée est utilisée pour supprimer des éléments de la file d'attente tout en vérifiant si la file d'attente est vide.

  • enQueue- Cette méthode est utilisée pour insérer de nouveaux éléments tout en vérifiant la taille de la file d'attente.

Dans une file d'attente circulaire, les éléments sont ajoutés depuis le backend et supprimés du frontend. deQueue et enQueue sont des fonctions indépendantes de la taille de la file d'attente et sont implémentées à l'aide de l'opérateur modulo. Leur complexité temporelle est O(1).

Gérer la file d'attente circulaire

Nous gérons les files d'attente circulaires en utilisant les opérations enQueue et deQueue. Initialement, la valeur avant de la file d'attente circulaire est 0, la valeur arrière est -1 et tous les éléments de la file d'attente circulaire sont NULL.

Exemple

Code C++, utilisant des tableaux pour implémenter une file d'attente circulaire

#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; }
Copier après la connexion

Sortie

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
Copier après la connexion

Conclusion

Les files d'attente circulaires sont utilisées dans la gestion de la mémoire et la planification du processeur. Il utilise la fonction displayQueue() pour afficher les éléments de la file d'attente.

Nous avons atteint la fin de ce tutoriel. J'espère que ce tutoriel vous a aidé à comprendre comment implémenter une file d'attente circulaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!