0% ont trouvé ce document utile (0 vote)
21 vues2 pages

Gestion de file d'attente en C

Deuxième exercice

Transféré par

romakabenoit18
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues2 pages

Gestion de file d'attente en C

Deuxième exercice

Transféré par

romakabenoit18
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

```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;
}
```

Vous aimerez peut-être aussi