Chapitre 5
Chapitre 5
Chapitre 5
Structure de données :
Files
1. Définition et types
La file d’attente est une structure qui permet de stocker des éléments dans un ordre donné et
de les retirer dans le même ordre, c’est à dire selon le protocole FIFO ’first in first out’.
« On ajoute toujours un élément en queue de liste et on retire celui qui est en tête ».
2. Files statiques
Dans cette section nous présentons les opérations primitives sur les files statiques.
1) La procédure initialiser :
En C :
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct {
int tableau[MAX];
int tete;
int queue;
} File;
2) La fonction EstPleine :
En C :
int EstPleine (File *file) {
return file->queue == MAX;
}
3) La fonction EstVide :
En C :
int estVide(File *file) {
return file->tete == file->queue;
}
4) La procédure Enfiler :
En C :
void enfiler(File *file, int element) {
if (estPleine(file)) {
printf("Erreur : La file est pleine\n");
return;
}
file->tableau[file->queue] = element;
file->queue ++;
}
5) La fonction Défiler :
En C :
int defiler(File *file) {
if (estVide(file)) {
printf("Erreur : La file est vide\n");
return -1; // Valeur d'erreur
}
return element;
}
6) La procédure Afficher :
En C :
void afficher(File *file) {
if (estVide(file)) {
printf("La file est vide\n");
return;
}
int i = file->tete;
while (i != file->queue) {
printf("%d ", file->tableau[i]);
i = (i + 1) % MAX;
}
printf("\n");
}
3. Files dynamiques
C’est une Liste chainée où le défilement se fait seulement à la tête et l’enfilement se fait
seulement à la queue de la liste.
3.1. Définition de type File dynamique
La définition du type File (dynamique) est comme suit :
Type
Structure Maillion
Ele : typeq;
suivant: * Maillion;
fin
Type Structure File
Début
Tête : *Maillon ; // Gade l’adresse de la tête de la File.
Queue: *Maillon; // Gade l’adresse ddernier élément inséré dans la File.
Fin
Dans le langage C, on définira le type File (dynamique) comme suit :
#include <stdio.h>
#include <stdlib.h>
typedef struct {
Node *tete;
Node *queue;
} File;
2) La Fonction EstVide :
En C :
int estVide(File *file) {
if (estVide(file)) {
file->tete = nouveauNode;
file->queue = nouveauNode;
} else {
file->queue->suivant = nouveauNode;
file->queue = nouveauNode;
}
}
4) La Fonction Défiler :
En C :
int defiler(File *file) {
if (estVide(file)) {
printf("Erreur : La file est vide\n");
return -1; // Valeur d'erreur
}
file->tete = file->tete->suivant;
if (file->tete == NULL) {
file->queue = NULL;
}
free(ancienTete);
return valeur;
}
5) La procédure Afficher :
En C :
void afficher(File *file) {
if (estVide(file)) {
printf("La file est vide\n");
return;
}
return compteur;
}
return file->tete->valeur;
}
TD5
Exercice 1:
Nous considérons des files d’attente représentant des nombres entiers sous forme de chiffres. Les chiffres
composant le nombre sont enfilés dans la file du droit vers la gauche. Dans l’exemple sous-dessous la file
F contient la représentation du nombre entier 942537 sous forme de chiffres.
F 7 3 5 2 4 9
On vous demande de :
1. Ecrire la fonction egale (F1, F2) : permettant de vérifier si la file F1 et la file F2 représentent le même
nombre.
2. Ecrire la fonction inverse (F) qui retourne une file F1 contenant le nombre inverse du nombre
représenté par la file F. L’inverse d’un nombre est le nombre composé de mêmes chiffres mais dans
l’ordre inverse.
3. Ecrire la procédure decomposer (F) permettant de décomposer le nombre représenté par la file F en
deux nombre N1 et N2 composés du même nombre de chiffres. La procédure affiche N1 et N2 si la
décomposition est possible, sinon elle affiche un message d’erreur.
Exemple : La décomposition du nombre (942 537) donne N1= 942 et N2 =537.
Exercice 2:
Contexte :
Une banque utilise un système de gestion des clients pour optimiser son service au guichet. Les clients
arrivent les uns après les autres et doivent être servis dans l'ordre d'arrivée. Chaque client a un numéro
unique et un temps estimé de service.
Consignes