From 559e41ed502bd21faf1c3fd471d8c542a997df1a Mon Sep 17 00:00:00 2001 From: Mylloon Date: Wed, 16 Nov 2022 11:40:06 +0100 Subject: [PATCH] impl chained list --- includes/struct.h | 16 ++++++++++++++-- src/liste.c | 49 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/includes/struct.h b/includes/struct.h index 1b5f672..bf33a55 100644 --- a/includes/struct.h +++ b/includes/struct.h @@ -31,15 +31,21 @@ typedef struct element Element; /* Créer un nouvel élément pour la liste */ Element *nouvel_element(void); -/* Liste */ +/* Liste chaînée */ struct list { Element *premier; }; typedef struct list Liste; -/* Créer une nouvelle liste */ +/* Créer une nouvelle liste vide */ Liste *nouvelle_liste(void); +/* Ajoute un élément à la liste */ +void ajoute_liste(Element *element_actuel, Element *nouvel_element); + +/* Supprime un élément de la liste */ +int supprime_liste(Element *element_actuel, Jeton *jeton); + /* Libère la liste en mémoire */ void free_liste(Liste *liste); @@ -59,6 +65,12 @@ Joueur *nouveau_joueur(int pion); /* Ajoute un nouveau joueur */ Joueur *ajoute_joueur(int pion, char *nom); +/* Ajoute un jeton d'un joueur à la liste */ +void ajoute_jeton_liste(Joueur *joueur, Jeton *jeton); + +/* Supprime le jeton d'un joueur de la liste */ +void supprime_jeton_liste(Joueur *joueur, Jeton *jeton); + /* Jeu contenant nos 2 joueurs et le plateau de jeu */ struct jeu { Joueur *j1; diff --git a/src/liste.c b/src/liste.c index 7951a19..be43865 100644 --- a/src/liste.c +++ b/src/liste.c @@ -1,9 +1,7 @@ #include "../includes/struct.h" -#include Element *nouvel_element(void) { Element *element = malloc(sizeof(Element)); - element->jeton_act = NULL; element->suivant = NULL; return element; } @@ -11,9 +9,56 @@ Element *nouvel_element(void) { Liste *nouvelle_liste(void) { Liste *liste = malloc(sizeof(Liste)); liste->premier = NULL; + return liste; } +void ajoute_jeton_liste(Joueur *joueur, Jeton *jeton) { + joueur->nb_jeton = joueur->nb_jeton + 1; + Element *ajout = nouvel_element(); + ajout->jeton_act = jeton; + ajoute_liste(joueur->liste_jeton->premier, ajout); +} + +void ajoute_liste(Element *actuel, Element *nouveau) { + if (actuel == NULL) { + actuel = nouveau; + } else if (actuel->jeton_act->pos_i != nouveau->jeton_act->pos_i || + actuel->jeton_act->pos_j != nouveau->jeton_act->pos_j) { + ajoute_liste(actuel->suivant, nouveau); + } +} + +void supprime_jeton_liste(Joueur *joueur, Jeton *jeton) { + if (joueur->liste_jeton->premier->jeton_act != jeton) { + if (supprime_liste(joueur->liste_jeton->premier, jeton)) { + joueur->nb_jeton = joueur->nb_jeton - 1; + } + + } else { + joueur->liste_jeton->premier = joueur->liste_jeton->premier->suivant; + joueur->nb_jeton = joueur->nb_jeton - 1; + } +} + +int supprime_liste(Element *act, Jeton *data) { + if (act->suivant == NULL) { + fprintf(stderr, "N'est pas dans la liste, pas possible de supprimer\n"); + + return 0; + } else if (act->suivant->jeton_act == data) { + printf("C'est (%d;%d)\n", act->suivant->jeton_act->pos_i, + act->suivant->jeton_act->pos_j); + Element *tmp = act->suivant; + act->suivant = act->suivant->suivant; + free(tmp); + + return 1; + } else { + return supprime_liste(act->suivant, data); + } +} + void free_liste(Liste *liste) { Element *actuel = liste->premier; while (actuel) {