| Votre opinion sur le cours de ce matin : | Votre opinion sur le TD de la semaine dernière : | 
L'objectif de ce TD est d'implémenter de plusieurs façon différentes (mais toujours en Java) des files d'entiers, autrement dit des classes qui offrent les méthodes décrites ci-dessous.
size renvoie le nombre d'éléments de la fileput insère un nouvel élément en fin de file. Lance
    l'exception FullQueueException si la file est pleine.get supprime et renvoie l'élément situé en tête de file.
    Lance l'exception EmptyQueueException si la file est
    vide.is_empty renvoie true si et
    seulement si la file est vide.flush vide la file.print affiche les entiers contenus dans la file sur une même ligne, séparés par des espaces, du plus ancien au plus récent.
    Les classes et interfaces du TD seront rangées dans deux paquets
    intfifo et applications, exceptée la classe
    Main avec laquelle on effectuera les tests
    (à mettre dans le default package de Java).
    
intfifo.FIFO dans le paquet intfifo.
          FIFO les méthodes décrites en haut de la page. public int  size () ;
          déclare la méthode size. FIFO, nous allons préciser lesquelles au moyen de la syntaxe:
          
          déclaration throws exception ;
          
          où
          déclaration est une déclaration de méthode standard sans le point-virgule final, etexception est une classe qui étend
          la classe Exception de Java.intfifo les classes publiques
          EmptyQueueException et FullQueueException
          qui étendent la classe Exception de Java, puisFIFO quelles sont les méthodes susceptibles de lever les
          exceptions EmptyQueueException et FullQueueException au moyen de la syntaxe décrite précédemment.Déposer le fichier FIFO.java :
Solution :FIFO
    But : écrire une classe ArrayQueue qui implémente
    l'interface FIFO à l'aide d'un tableau d'entiers de type int [].
Quelques indications et une contrainte :
older
    et size qui indiquent respectivement la position de
    l'élément le plus ancien de la file (donc celui qui devra être
    supprimé lors du prochain appel à la méthode get) et
    le nombre d'éléments contenus dans la
    file. Main. Il faut pour cela « décommenter » les lignes que
    vous souhaitez activer. Déposer le fichier ArrayQueue.java :
Solution :
ArrayQueue 
    Map de Java) qui associe à chaque
    sommet l'ensemble (i.e. interface Set de Java)
    de ses successeurs. FIFO pour implémenter le parcours de graphe en largeur depuis
    un sommet donné.
    applications.
applications et à l'aide des interfaces
    (paramétrées) Map<K,V> et
    Set<E>, créer l'interface Graph
    qui contient les méthodes ci-dessous :
      successors qui prend en argument un entier i et
        renvoie l'ensemble des successeurs de i dans le graphe.addEdge qui prend en argument deux entiers i et
        j et ajoute l'arc i→j au graphe.print qui affiche un graphe en affichant pour chaque
        sommet une ligne qui indique ses successeurs.  
MyGraph qui implémente Graph.
    On ajoutera notamment deux constructeurs :
    MyGraph () qui construit le graphe vide ;MyGraph (int [][] g) qui prend un tableau de tableaux
        d'entiers en argument et renvoie le graphe correspondant (les
        éléments de la k-ème ligne sont les successeurs de k).
        C'est pratique pour faire des tests.
BFS pour réaliser le
    parcours en largeur, contenant
        BFS(Graph g) prenant le
        graphe à parcourir en argument ;
        printReachableFrom qui prend en argument un entier i et
        affiche (sur une ligne et séparés par des espaces) les sommets du
        graphe visités par un parcours en largeur partant du sommet i.
        Rappel concernant le parcours en largeur :
Main (décommenter les lignes
    que vous souhaitez activer). Vous devez obtenir la sortie suivante :
      
        0: 0 1 2 3
        1: 1 3 0 2
        2: 2 3 0 1
        3: 3 0 1 2
        4: 4 5
        5: 5
    Déposer les fichiers Graph.java, MyGraph.java, et BFS.java:
Solution :Graph /
 MyGraph /
 BFS
LinkedQueue qui implémente l'interface
FIFO à l'aide de listes chaînées.
    
    L'utilisation de tableaux dans ArrayQueue contraint
    le programmeur à fixer une taille maximale initialement. Nous
    allons lever cette contrainte en utilisant des listes chaînées.
    
    Une file est une liste chaînée dont la tête est l'élément le plus
    ancien (donc celui qui sera supprimé au prochain appel à la
    méthode get).  On maintient aussi un pointeur sur la
    dernière cellule de la liste chaînée, de manière à pouvoir ajouter
    de nouveaux éléments à la fin de la liste.
    
intfifo, ajouter une classe
    ListCell pour représenter une liste non vide,
    avec deux champs
    value et next. La valeur null
    sera utilisée pour représenter la liste vide.
    
intfifo une
    implémentation LinkedQueue de l'interface
    FIFO à l'aide de la classe ListCell.
    
Main (décommenter les lignes
    que vous souhaitez activer). 
BFS, remplacer l'utilisation de
    ArrayQueue par LinkedQueue. Relancer les
    tests. Vous devez observer les mêmes résultats.
    
ArrayQueue et LinkedQueue,
        munir la classe BFS
        d'une méthode abstraite
        FIFO newQueue() et l'implémenter dans deux sous-classes
        distinctes, d'un côté par return new
        ArrayQueue(128)
        et de l'autre par return new LinkedQueue ().
      Déposer les fichiers ListCell.java et LinkedQueue.java :
Solution :ListCell et
 LinkedQueue