Académique Documents
Professionnel Documents
Culture Documents
On souhaite implémenter une file d'attente des nombres entiers à l'aide d'une liste chaînée en utilisant
une structure de synthèse avec trois champs :
• nbN : contient le nombre des nœuds de la file
• tete : pointeur vers le premier élément de la file
• queue : pointeur vers le dernier élément de la file
Les elements de la file ont la structure suivante :
typedef struct element{
int d ; 41 5 23 13
struct element *next ; next next next next
} Noeud;
nbN
La structure de synthèse a la forme suivante : tete
typedef struct file{ queue
int nbN ; Noeud *tete ;
Noeud *queue ;
}File ;
1) Écrire les primitives de gestion d'une file d'attente suivantes :
• void creerFileVide(File *f) : pour créer une file vide
• void enfiler(File *f,int el): Place l'élément « el » dans la queue • int
tailleFile (File *f) : Retourne le nombre d'éléments dans la file.
• int defiler(File *f) : Retire l'élément qui est à la tete de la file (affiche un message
d'erreur si la file est vide).
2) Ajouter une fonction void afficherFile(File *f) et écrire un petit programme de
test.
3) Ajouter une primitive void renverserFile(File *f) qui renverse les éléments de la file
(la tête devient queue et vice-versa). Cette opération se fait à l’aide d’une pile « P » à créer dans la
fonction. Pour simplifier, on suppose avoir déjà défini la structure de la pile ainsi que ses fonctions
caractéristiques empiler et depiler (voir le cours /TD sur les piles).
2) L'algorithme précédent est très dispendieux (Observer l'évolution des files à chaque étape) car il
place la plupart des entiers de Hamming dans les trois files alors qu'une seule suffirait. En effet, si
x est un entier de Hamming divisible à la fois par 2, 3 et 5 alors x a été placé dans h2 au moment
où l'on extrayait x/2, dans h3 au moment où l'on extrayait x/3 et dans h5 au moment où l'on extrait
x/5. Modifier votre programme de sorte qu'un même entier de Hamming ne soit inséré que dans
une seule des files.