• [^] # Re: liste chainé bon exo

    Posté par . En réponse au message Affichage listes chainées en C. Évalué à 0.

    Tu m'as l'air de très bien maitriser les listes chainées en C. Ton code me donne une idée mais l'exercice demande:
    Construire en C une liste L à quatre éléments dans le code du programme à l'aide de cons. Testez car(L), car(cdr(L), car(cdr(cdr L)), car(cdr(cdr(cdr L))), en affichant leur résultat.
    Donc je dois suivre les spécifications et adapter par rapport à l'énoncé.
    car(L) extrait le premier élément de notre liste L
    car(cdr(L) extrait le deuxième
    car(cdr(cdr L)) extrait le troisième
    car(cdr(cdr(cdr L))) extrait le quatrième
    Comme en Langage Lisp.
    Voilà pourquoi je dois adapter ces spécifications et compléter ce qui m'a été donné comme indice et exemple pour pouvoir réussir à le faire.

    typedef struct Doublet {void * car ; struct Doublet * cdr ;} * list ; // la structure de base ; list est un pointeur sur un doublet
    #define car(doublet)((doublet)->car) 
     //macro plutôt que fonction, pour écrire car(x) = ...
    #define cdr(doublet) ((doublet)->cdr)
    list cons(void *, const list); 
     // prototype de la fonction cons
    ...
    // Définition de la fonction cons ; elle renvoie un pointeur sur un doublet
    list cons(void * elt, const list L)
    { list Cons = malloc(sizeof(struct Doublet));
     // alloc mémoire d'un doublet
     car(Cons) = elt ;
     cdr(Cons) = L ;
     return Cons ; }
    

    Et ma difficulté se repose justement au niveau de cette adaptation avec ces indices données pour répondre au besoin de l'exercice.