#include #include /* Pour exit */ #define SIZE 10 struct stfile { int tab[SIZE]; int taille; /* taille du tableau tab */ int nbElems; /* nombre de valeurs stockees dans le tableau */ }; typedef struct stfile file; /**********************************************************************/ file creerFile(void) { file f; f.taille = SIZE; f.nbElems = 0; return f; } /**********************************************************************/ void afficherFile(file f) { int i; printf("[T] "); for(i=f.nbElems-1 ; i>=0; i=i-1) { printf("%d ",f.tab[i]); } printf("[Q]"); } /**********************************************************************/ int estVideFile(file f) { int returnValue = 0; if (f.nbElems == 0) returnValue=1; return returnValue; } /**********************************************************************/ int estPleineFile(file f) { int returnValue = 0; if (f.nbElems == f.taille) returnValue=1; return returnValue; } /**********************************************************************/ int premierFile(file f) { if (estVideFile(f)) { printf("File vide!!!...\n"); exit(1); } return f.tab[f.nbElems-1]; } /**********************************************************************/ void enfilerFile(file* f, int e) { int i; if (estPleineFile(*f)) { printf("File pleine!!!...\n"); exit(1); } for(i=(*f).nbElems-1 ; i>=0; i=i-1) { (*f).tab[i+1] = (*f).tab[i]; } (*f).tab[0] = e; (*f).nbElems = (*f).nbElems + 1; } /**********************************************************************/ void defilerFile(file* f) { if (estVideFile(*f)) { printf("File vide!!!...\n"); exit(1); } (*f).nbElems = (*f).nbElems - 1; } /**********************************************************************/ int menu (void) { int rep, minRep = 0 , maxRep = 4; do { printf("\n"); printf("0. Sortie\n"); printf("1. Afficher la file\n"); printf("2. Afficher la tete\n"); printf("3. Enfiler un element\n"); printf("4. Defiler un element\n"); printf("Votre choix:"); scanf("%d",&rep); if (rep < minRep || rep > maxRep) { printf("Erreur de saisie\n"); } } while (rep < minRep || rep > maxRep); return rep; } /**********************************************************************/ int main(void) { file f = creerFile(); int rep; rep = menu(); while (rep!=0) { /* On peut aussi faire des if..else */ switch (rep) { case 1: { afficherFile(f); printf("\n"); break; } case 2: { if (estVideFile(f)) { printf("Attention, file vide!\n"); } else { int premier = premierFile(f); printf("La tete de la file est : %d\n",premier); } break; } case 3: { if (estPleineFile(f)) { printf("Attention, file pleine!\n"); } else { int elem; printf("Element a enfiler?\n"); scanf("%d",&elem); enfilerFile(&f,elem); } break; } default: { if (estVideFile(f)) { printf("Attention, file vide!\n"); } else { defilerFile(&f); } break; } } rep = menu(); } printf("Sortie du programme\n"); return 0; }