71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
![]() |
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
typedef struct maillon_s {
|
||
|
char valeur;
|
||
|
struct maillon_s* suivant;
|
||
|
} maillon;
|
||
|
|
||
|
typedef struct {
|
||
|
maillon* tete;
|
||
|
maillon* queue;
|
||
|
} file;
|
||
|
|
||
|
void enqueue_file(file* f, char valeur) {
|
||
|
maillon* nouveau = (maillon*)malloc(sizeof(maillon));
|
||
|
if (nouveau == NULL) {
|
||
|
printf("Erreur: allocation memoire\n");
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
nouveau->valeur = valeur;
|
||
|
nouveau->suivant = NULL;
|
||
|
if (f->queue == NULL) {
|
||
|
f->tete = f->queue = nouveau;
|
||
|
} else {
|
||
|
f->queue->suivant = nouveau;
|
||
|
f->queue = nouveau;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
char dequeue_file(file* f) {
|
||
|
if (f->tete == NULL) {
|
||
|
printf("Erreur: file vide\n");
|
||
|
return '\0';
|
||
|
}
|
||
|
maillon* temp = f->tete;
|
||
|
char valeur = temp->valeur;
|
||
|
f->tete = f->tete->suivant;
|
||
|
if (f->tete == NULL) {
|
||
|
f->queue = NULL;
|
||
|
}
|
||
|
free(temp);
|
||
|
return valeur;
|
||
|
}
|
||
|
|
||
|
int empty_file(file* f) {
|
||
|
return f->tete == NULL;
|
||
|
}
|
||
|
|
||
|
int main(void) {
|
||
|
file f = {NULL, NULL};
|
||
|
char ordre[2];
|
||
|
|
||
|
printf("La file attend vos ordres \n > ");
|
||
|
while (scanf("%1s", ordre) == 1) {
|
||
|
if (ordre[0] == 'q') {
|
||
|
printf("Au revoir\n");
|
||
|
break;
|
||
|
} else if (ordre[0] == '+') {
|
||
|
scanf(" %c", &ordre[1]);
|
||
|
enqueue_file(&f, ordre[1]);
|
||
|
} else if (ordre[0] == '-') {
|
||
|
printf("Dequeue: %c\n", dequeue_file(&f));
|
||
|
} else {
|
||
|
printf("Commande invalide\n");
|
||
|
}
|
||
|
printf("\nLa file attend vos ordres \n > ");
|
||
|
}
|
||
|
|
||
|
return EXIT_SUCCESS;
|
||
|
}
|