
// C++ : Gestion d'une liste fifo

#include "definitions.h"

struct str_liste 
       {
       Cstring nom;
       str_liste* suivant;
       };

// ======================================================= creer_liste
str_liste* creer_liste ()
{
   const int  size_rep = 63;
   char reponse [size_rep+1];

   str_liste* tete  = NULL;
   str_liste* queue = NULL;

   while (ReadString (reponse, "Entrez un nom : ", size_rep)>0)
         {
                                  // Creation d'une copie de chaine
         int lg = strlen (reponse);
         Cstring name = new char [lg];
         strcpy (name, reponse);

         str_liste* elt = new str_liste;
         elt->nom = name;
         elt->suivant = NULL;
         if (tete==NULL) tete           = elt;
            else         queue->suivant = elt;
         queue = elt;
         } 

   return tete;
}
// ======================================================= imprimer_liste
void imprimer_liste (str_liste* tete)
{
   Print (".... Impression de la liste");
   for (str_liste* elt=tete; elt!=NULL; elt=elt->suivant)
       Print (elt-> nom);
}
// ======================================================= detruire_liste
void detruire_liste (str_liste* tete)
{
   Print ("....Destruction de la liste");

   str_liste* next = NULL;
   for (str_liste* elt=tete; elt!=NULL; elt=next)
       {
       next = elt->suivant;   // memoriser le suivant avant de détruire elt
       delete elt-> nom;
       delete elt;
       } 
}
// ======================================================= Main
int main ()
{
   str_liste* tete = creer_liste ();
   imprimer_liste (tete);
   detruire_liste (tete);
}
