```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_FILE 100 // Taille maximale de la file d'attente
// Structure pour représenter un client
typedef struct {
int numero;
} Client;
// Structure pour représenter la file d'attente
typedef struct {
Client *file[MAX_FILE];
int arriere;
int avant;
} File;
// Initialiser la file
void initialiser_file(File *file) {
file->arriere = -1;
file->avant = -1;
}
// Vérifier si la file est vide
int est_vide(File *file) {
return file->arriere == -1;
}
// Vérifier si la file est pleine
int est_pleine(File *file) {
return (file->arriere + 1) % MAX_FILE == file->avant;
}
// Enfiler un client (arrivée d'un nouveau client)
void enfiler(File *file, int numero) {
if (est_pleine(file)) {
printf("File pleine !\n");
return;
}
Client *client = (Client *)malloc(sizeof(Client));
client->numero = numero;
if (est_vide(file)) {
file->avant = 0;
}
file->arriere = (file->arriere + 1) % MAX_FILE;
file->file[file->arriere] = client;
}
// Défiler un client (passage en caisse)
Client *defiler(File *file) {
if (est_vide(file)) {
printf("File vide !\n");
return NULL;
}
Client *client = file->file[file->avant];
if (file->avant == file->arriere) { // Un seul élément dans la file
initialiser_file(file); // La file est vide après le défilement
} else {
file->avant = (file->avant + 1) % MAX_FILE;
}
return client;
}
// Afficher la file d'attente
void afficher_file(File *file) {
if (est_vide(file)) {
printf("File vide.\n");
return;
}
printf("File d'attente : ");
int i = file->avant;
do {
printf("%d ", file->file[i]->numero);
i = (i + 1) % MAX_FILE;
} while (i != (file->arriere + 1) % MAX_FILE);
printf("\n");
}
int main() {
File file;
initialiser_file(&file);
// Simulation d'arrivée de clients
enfiler(&file, 1);
enfiler(&file, 2);
enfiler(&file, 3);
printf("\nAvant passage en caisse : \n");
afficher_file(&file);
// Simulation de passage en caisse
Client *client_defilee = defiler(&file);
if (client_defilee != NULL) {
printf("\nClient %d passe en caisse.\n", client_defilee->numero);
free(client_defilee); // Libérer la mémoire allouée
}
printf("\nAprès passage en caisse : \n");
afficher_file(&file);
return 0;
}
```