next up previous contents
suivant: Exercice 16 - Tri monter: L'heure du code précédent: Exercice 14 - Echauffement   Table des matières

Exercice 15 - Une bibliothèque de listes chaînées

Ecrivez les fonctions du fichier linkedList.c correspondant au fichier linkedList.h ci-dessous :


#ifndef LINKED_LIST_H

#define LINKED_LIST_H

/*
  Maillon de la liste chainee
*/

typedef struct l
{
  /*
    pointeur vers la donnee 
  */
  void* data;

  /*
    pointeur vers le maillon suivant 
  */
  struct l* next;
} link;

/*
  Type encapsulant la liste chainee 
*/

typedef struct
{
  /*
    nombre d'elements de la liste chainee
   */
  int size;

  /*
    pointeur vers le premier elemtn de la liste chainee
   */
  link* first;

  /*
    pointeur vers le dernier element de la liste chainee
   */
  link* last;
} linkedList;


/*
 Cree une liste chainee ne contenant aucun element.
*/

linkedList* linkedListCreate();

/*
  Ajoute l'element x dans a la fin de la liste chainee l
*/

void linkedListAppend(linkedList* l, void* x);

/*
  Ajoute le maillon lk a la fin de la liste l
*/

void linkedListAppendLink(linkedList* l, link* lk);

/*
  Ajoute l'element x dans au debut de la liste chainee l
*/

void linkedListPush(linkedList* l, void* x);

/*
  Ajoute le maillon lk au debut de la liste l
*/

void linkedListPushLink(linkedList* l, link* lk);

/*
  Retourne la taille de la liste l
*/

int linkedListGetSize(linkedList* l);

/*
  Retourne un pointeur vers le premier maillon de 
  la liste chainee l, NULL si l est vide.
*/

link* linkedListGetFirst(linkedList* l);

/*
  Retourne un pointeur vers le premier maillon de l, 
  enleve ce maillon de la liste l. Retourne NULL
  si l est vide.
*/

link* linkedListUnlinkFirst(linkedList* l);

/*
  Retourne une liste chainee contenant toutes les images 
  des donnees par la fonction f. En posant f = id, on obtient 
  une fonction de copie.
*/

linkedList* linkedListMap(linkedList* l, void* (*f)(void*));

/*
  Concatene les deux listes begin et end, la deuxieme est ajoutee 
  a la fin de la premiere.
*/

void linkedListConcat(linkedList* begin, linkedList* end);

/*
  Applique la fonction f a toutes les donnees de la liste l.
  Passer une fonction d'affichage permet par exemple d'afficher 
  les donnees de chaque maillon.
*/

void linkedListApply(linkedList* l, void (*f)(void*));

/*
  Desalloue l et tous ses maillons, applique le destructeur fr
  a la donnee de chaque maillon.
*/

void linkedListDestroy(linkedList*, void (*fr)(void*));

#endif

linkedList.h



klaus 2010-08-05