Vous êtes sur la page 1sur 2

Partie A :

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).

Partie B : La suite de Hamming


Un entier de Hamming est un entier naturel non nul dont les seuls facteurs premiers éventuels sont :
2; 3; 5. Le problème de Hamming consiste à énumérer les n premiers entiers de Hamming par ordre
croissant. Pour cela on remarque que le premier entier de Hamming est 1 et que tout autre entier de
Hamming est le double, le triple ou le quintuple d'un entier de Hamming plus petit (ces cas n'étant pas
exclusifs). Il suffit donc d'utiliser trois files d'attente, h2, h3 et h5 contenant initialement le seul
nombre 1 puis d'appliquer l'algorithme :
• déterminer le plus petit des trois nombres en tête des files, soit x.
• Imprimer x,
• le retirer de chacune des files le contenant
• insérer en queue de h2, h3 et h5 respectivement 2x, 3x et 5x.
1) Ecrire une fonction qui affiche les n premiers entiers de Hamming.

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.

Vous aimerez peut-être aussi