/**************************************************************************/ /* */ /* Thibaut Balabonski, Sylvain Conchon, Jean-Christophe Filliâtre, */ /* Kim Nguyen, Laurent Sartre */ /* */ /* Informatique - MP2I/MPI - CPGE 1re et 2e années. */ /* Cours et exercices corrigés. Éditions Ellipses, 2022. */ /* */ /* https://www.informatique-mpi.fr/ */ /* */ /**************************************************************************/ // listes simplement chaînées, avec des éléments de type int // la structure Cell est volontairement exportée // pour être réutilisée, par exemple dans stack.c ou queue.c #include "prelude.h" #ifndef LIST #define LIST typedef struct Cell { int value; struct Cell *next; } list; extern list *list_nil; list *list_cons(int x, list *n); list *list_append(list *l1, list *l2); // concatène en place les listes l1 et l2 i.e. connecte de dernier maillon // de l1 à l2 ; renvoie la tête de la liste // suppose que les listes l1 et l2 sont disjointes // l1 comme l2 peuvent être vides int list_nth(list *l, int n); int list_length(list *l); list *list_interval(int lo, int hi); // renvoie la liste lo,lo+1,...,hi-1 void list_print(list *l); bool list_cyclic(list *l); list *list_reversal(list *l); int list_random(list *l); // renvoie un élément aléatoire de l, en supposant l non vide void list_delete(list *l); #endif