Cours de programmation séquentielle

Files d’attente

Buts

Énoncé

Implémenter deux librairies de files d’attente que vous avez vues en cours d’algorithmique et structures de données:

Bien entendu vous devez utiliser git et make pour la gestion et la compilation de votre projet.

Type des données dans les files

Le type, T, des éléments à stocker dans vos files d’attente seront connus à la compilation mais définis à l’aide d’un typedef1 (un alias pour un type)

typedef int32_t T;

Ainsi les éléments de votre file d’attente dans le cas où elle est basée sur la liste chaînée seront de type (notez bien que data est de type T):

struct _element {
    T data;
    struct _element *next;
} element;

De cette façon vous pouvez facilement changer le type des données contenues dans vos files d’attente. Cela vous sera utile pour un prochain travail pratique.

Cahier des charges

Vous devez implémenter pour chaque file d’attente toutes les fonctions de manipulation de files que vous avez vues au cours d’algorithmique et structures de données.

Pour chacune des files implémenter un programme qui permet de tester le bon fonctionnement de votre librairie.

La file basée sur un tableau

Il s’agit ici de créer les fonctions suivantes:

La file basée sur une liste chaînée

Il s’agit ici de créer les fonctions suivantes:

Et avec des vecteurs

Adapter la librairie de vecteurs en deux dimensions que vous avez déjà implémentée en physique pour contenir uniquement des entiers (et non des double). Écrivez ensuite un programme permettant de tester que votre librairie de files d’attente fonctionne correctement avec ces vecteurs d’entiers.


  1. Cela permet d’avoir une certaine “généricité” du code. Pour avoir une vraie généricité les éléments de la file d’attente devraient être de type void *. Si cela vous intéresse vous pouvez tenter de tout implémenter à l’aide de void * mais cela complique beaucoup le travail pratique.↩︎