Structure des données et algorithmes - File d'attente
Queue est une structure de données abstraite, quelque peu similaire à Stacks. Contrairement aux piles, une file d'attente est ouverte à ses deux extrémités. Une extrémité est toujours utilisée pour insérer des données (mise en file d'attente) et l'autre est utilisée pour supprimer des données (dequeue). La file d'attente suit la méthodologie du premier entré, premier sorti, c'est-à-dire que l'élément de données stocké en premier sera consulté en premier.
Un exemple concret de file d'attente peut être une route à sens unique à voie unique, où le véhicule entre en premier, sort en premier. D'autres exemples concrets peuvent être considérés comme des files d'attente aux guichets et aux arrêts de bus.
Représentation de la file d'attente
Comme nous comprenons maintenant que dans la file d'attente, nous accédons aux deux extrémités pour des raisons différentes. Le diagramme suivant donné ci-dessous tente d'expliquer la représentation de la file d'attente sous forme de structure de données -
Comme dans les piles, une file d'attente peut également être implémentée à l'aide de tableaux, de listes liées, de pointeurs et de structures. Par souci de simplicité, nous allons implémenter des files d'attente en utilisant un tableau à une dimension.
Opérations de base
Les opérations de file d'attente peuvent impliquer l'initialisation ou la définition de la file d'attente, son utilisation, puis son effacement complet de la mémoire. Ici, nous allons essayer de comprendre les opérations de base associées aux files d'attente -
enqueue() - ajouter (stocker) un élément à la file d'attente.
dequeue() - supprimer (accéder) un élément de la file d'attente.
Peu de fonctions supplémentaires sont nécessaires pour rendre efficace l'opération de file d'attente mentionnée ci-dessus. Ce sont -
peek() - Obtient l'élément au début de la file d'attente sans le supprimer.
isfull() - Vérifie si la file d'attente est pleine.
isempty() - Vérifie si la file d'attente est vide.
Dans la file d'attente, nous retirons (ou accédons) toujours aux données, pointées par front pointeur et tout en enregistrant (ou en stockant) des données dans la file d'attente, nous prenons l'aide de rear aiguille.
Découvrons d'abord les fonctions de support d'une file d'attente -
coup d'oeil ()
Cette fonction permet de voir les données au frontde la file d'attente. L'algorithme de la fonction peek () est le suivant -
Algorithm
begin procedure peek
return queue[front]
end procedure
Implémentation de la fonction peek () en langage de programmation C -
Example
int peek() {
return queue[front];
}
est rempli()
Comme nous utilisons un tableau à dimension unique pour implémenter la file d'attente, nous vérifions simplement que le pointeur arrière atteint MAXSIZE pour déterminer que la file d'attente est pleine. Si nous maintenons la file d'attente dans une liste chaînée circulaire, l'algorithme sera différent. Algorithme de la fonction isfull () -
Algorithm
begin procedure isfull
if rear equals to MAXSIZE
return true
else
return false
endif
end procedure
Implémentation de la fonction isfull () en langage de programmation C -
Example
bool isfull() {
if(rear == MAXSIZE - 1)
return true;
else
return false;
}
est vide()
Algorithme de la fonction isempty () -
Algorithm
begin procedure isempty
if front is less than MIN OR front is greater than rear
return true
else
return false
endif
end procedure
Si la valeur de front est inférieur à MIN ou 0, il indique que la file d'attente n'est pas encore initialisée, donc vide.
Voici le code de programmation C -
Example
bool isempty() {
if(front < 0 || front > rear)
return true;
else
return false;
}
Opération de mise en file d'attente
Les files d'attente maintiennent deux pointeurs de données, front et rear. Par conséquent, ses opérations sont comparativement difficiles à mettre en œuvre que celles des piles.
Les étapes suivantes doivent être prises pour mettre en file d'attente (insérer) des données dans une file d'attente -
Step 1 - Vérifiez si la file d'attente est pleine.
Step 2 - Si la file d'attente est pleine, générer une erreur de dépassement de capacité et quitter.
Step 3 - Si la file d'attente n'est pas pleine, incrémentez rear pointeur pour pointer le prochain espace vide.
Step 4 - Ajoutez un élément de données à l'emplacement de la file d'attente, où pointe l'arrière.
Step 5 - retour de succès.
Parfois, nous vérifions également si une file d'attente est initialisée ou non, pour gérer d'éventuelles situations imprévues.
Algorithme pour l'opération de mise en file d'attente
procedure enqueue(data)
if queue is full
return overflow
endif
rear ← rear + 1
queue[rear] ← data
return true
end procedure
Implémentation de enqueue () en langage de programmation C -
Example
int enqueue(int data)
if(isfull())
return 0;
rear = rear + 1;
queue[rear] = data;
return 1;
end procedure
Opération de retrait de la file d'attente
L'accès aux données de la file d'attente est un processus de deux tâches: accéder aux données où frontpointe et supprime les données après l'accès. Les étapes suivantes sont prises pour effectuerdequeue opération -
Step 1 - Vérifiez si la file d'attente est vide.
Step 2 - Si la file d'attente est vide, générer une erreur de sous-dépassement et quitter.
Step 3 - Si la file d'attente n'est pas vide, accédez aux données où front pointe.
Step 4 - Incrément front pointeur pour pointer vers le prochain élément de données disponible.
Step 5 - Retournez le succès.
Algorithme pour l'opération de retrait de la file d'attente
procedure dequeue
if queue is empty
return underflow
end if
data = queue[front]
front ← front + 1
return true
end procedure
Implémentation de dequeue () en langage de programmation C -
Example
int dequeue() {
if(isempty())
return 0;
int data = queue[front];
front = front + 1;
return data;
}
Pour un programme Queue complet en langage de programmation C, veuillez cliquer ici .