TP3 – Solutions des exercices sur les Files en C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
//==============================//
// EXERCICE 1 : File Statique //
//==============================//
typedef struct {
int tab[MAX];
int debut;
int queue;
} FileS;
void initialiserFileS(FileS* f) {
f->debut = 0;
f->queue = -1;
int estVideS(FileS* f) {
return f->debut > f->queue;
int estPleineS(FileS* f) {
return f->queue == MAX - 1;
}
void enfilerS(FileS* f, int val) {
if (!estPleineS(f)) {
f->queue++;
f->tab[f->queue] = val;
printf("%d ajouté à la file statique.\n", val);
} else {
printf("File statique pleine.\n");
int defilerS(FileS* f) {
if (!estVideS(f)) {
int val = f->tab[f->debut++];
return val;
} else {
printf("File statique vide.\n");
return -1;
void afficherFileS(FileS* f) {
if (!estVideS(f)) {
printf("File statique : ");
for (int i = f->debut; i <= f->queue; i++) {
printf("%d ", f->tab[i]);
}
printf("\n");
} else {
printf("File statique vide.\n");
//====================================//
// EXERCICE 2 : Simulation de guichet //
//====================================//
void simulationGuichet() {
FileS file;
initialiserFileS(&file);
enfilerS(&file, 101);
enfilerS(&file, 102);
afficherFileS(&file);
printf("Client servi : %d\n", defilerS(&file));
afficherFileS(&file);
//==============================//
// EXERCICE 3 : File Dynamique //
//==============================//
typedef struct Elem {
int info;
struct Elem* suiv;
} Elem;
typedef struct {
Elem* debut;
Elem* queue;
} FileD;
void initFileD(FileD* f) {
f->debut = f->queue = NULL;
int estVideD(FileD* f) {
return f->debut == NULL;
void enfilerD(FileD* f, int val) {
Elem* nouveau = (Elem*)malloc(sizeof(Elem));
nouveau->info = val;
nouveau->suiv = NULL;
if (estVideD(f)) {
f->debut = f->queue = nouveau;
} else {
f->queue->suiv = nouveau;
f->queue = nouveau;
printf("%d ajouté à la file dynamique.\n", val);
}
int defilerD(FileD* f) {
if (!estVideD(f)) {
Elem* temp = f->debut;
int val = temp->info;
f->debut = f->debut->suiv;
if (f->debut == NULL)
f->queue = NULL;
free(temp);
return val;
} else {
printf("File dynamique vide.\n");
return -1;
void afficherFileD(FileD* f) {
Elem* temp = f->debut;
printf("File dynamique : ");
while (temp != NULL) {
printf("%d -> ", temp->info);
temp = temp->suiv;
printf("NULL\n");
}
void libererFileD(FileD* f) {
while (!estVideD(f)) {
defilerD(f);
//=====================================================//
// EXERCICE 4 : File Dynamique avec Structure Client //
//=====================================================//
typedef struct {
int id;
char nom[30];
} Client;
typedef struct Cellule {
Client info;
struct Cellule* suiv;
} Cellule;
typedef struct {
Cellule* debut;
Cellule* queue;
} FileClient;
void enfilerClient(FileClient* f, Client c) {
Cellule* nouveau = (Cellule*)malloc(sizeof(Cellule));
nouveau->info = c;
nouveau->suiv = NULL;
if (f->debut == NULL)
f->debut = f->queue = nouveau;
else {
f->queue->suiv = nouveau;
f->queue = nouveau;
Client defilerClient(FileClient* f) {
Client c = {-1, ""};
if (f->debut != NULL) {
Cellule* temp = f->debut;
c = temp->info;
f->debut = f->debut->suiv;
if (f->debut == NULL) f->queue = NULL;
free(temp);
return c;
void afficherClients(FileClient* f) {
Cellule* temp = f->debut;
printf("File Clients : \n");
while (temp) {
printf("ID: %d, Nom: %s\n", temp->[Link], temp->[Link]);
temp = temp->suiv;
//============================================================//
// EXERCICE 5 : Sauvegarde et Chargement depuis un fichier //
//============================================================//
void sauvegarderFileD(FileD* f, const char* nomFichier) {
FILE* fp = fopen(nomFichier, "w");
if (!fp) {
printf("Erreur d'ouverture du fichier.\n");
return;
Elem* temp = f->debut;
while (temp) {
fprintf(fp, "%d\n", temp->info);
temp = temp->suiv;
fclose(fp);
printf("File dynamique sauvegardée avec succès.\n");
void chargerFileD(FileD* f, const char* nomFichier) {
FILE* fp = fopen(nomFichier, "r");
if (!fp) {
printf("Erreur de lecture du fichier.\n");
return;
int val;
while (fscanf(fp, "%d", &val) != EOF) {
enfilerD(f, val);
fclose(fp);
printf("File dynamique chargée avec succès.\n");
//=====================================================//
// EXERCICE 6 : - Système Complet //
//=====================================================//
void menuFileSystem() {
FileD f;
initFileD(&f);
int choix, val;
char nomFichier[] = "[Link]";
do {
printf("\n--- MENU ---\n");
printf("1. Enfiler\n");
printf("2. Défiler\n");
printf("3. Afficher\n");
printf("4. Sauvegarder\n");
printf("5. Charger\n");
printf("0. Quitter\n");
printf("Votre choix : ");
scanf("%d", &choix);
switch (choix) {
case 1:
printf("Entrez la valeur : ");
scanf("%d", &val);
enfilerD(&f, val);
break;
case 2:
val = defilerD(&f);
if (val != -1) printf("Valeur retirée : %d\n", val);
break;
case 3:
afficherFileD(&f);
break;
case 4:
sauvegarderFileD(&f, nomFichier);
break;
case 5:
chargerFileD(&f, nomFichier);
break;
case 0:
libererFileD(&f);
printf("Fin du programme.\n");
break;
default:
printf("Choix invalide.\n");
} while (choix != 0);