impl chained list

This commit is contained in:
Mylloon 2022-11-16 11:40:06 +01:00
parent 6e337dc97d
commit 559e41ed50
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 61 additions and 4 deletions

View file

@ -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;

View file

@ -1,9 +1,7 @@
#include "../includes/struct.h"
#include <stdlib.h>
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) {