impl chained list
This commit is contained in:
parent
6e337dc97d
commit
559e41ed50
2 changed files with 61 additions and 4 deletions
|
@ -31,15 +31,21 @@ typedef struct element Element;
|
||||||
/* Créer un nouvel élément pour la liste */
|
/* Créer un nouvel élément pour la liste */
|
||||||
Element *nouvel_element(void);
|
Element *nouvel_element(void);
|
||||||
|
|
||||||
/* Liste */
|
/* Liste chaînée */
|
||||||
struct list {
|
struct list {
|
||||||
Element *premier;
|
Element *premier;
|
||||||
};
|
};
|
||||||
typedef struct list Liste;
|
typedef struct list Liste;
|
||||||
|
|
||||||
/* Créer une nouvelle liste */
|
/* Créer une nouvelle liste vide */
|
||||||
Liste *nouvelle_liste(void);
|
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 */
|
/* Libère la liste en mémoire */
|
||||||
void free_liste(Liste *liste);
|
void free_liste(Liste *liste);
|
||||||
|
|
||||||
|
@ -59,6 +65,12 @@ Joueur *nouveau_joueur(int pion);
|
||||||
/* Ajoute un nouveau joueur */
|
/* Ajoute un nouveau joueur */
|
||||||
Joueur *ajoute_joueur(int pion, char *nom);
|
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 */
|
/* Jeu contenant nos 2 joueurs et le plateau de jeu */
|
||||||
struct jeu {
|
struct jeu {
|
||||||
Joueur *j1;
|
Joueur *j1;
|
||||||
|
|
49
src/liste.c
49
src/liste.c
|
@ -1,9 +1,7 @@
|
||||||
#include "../includes/struct.h"
|
#include "../includes/struct.h"
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
Element *nouvel_element(void) {
|
Element *nouvel_element(void) {
|
||||||
Element *element = malloc(sizeof(Element));
|
Element *element = malloc(sizeof(Element));
|
||||||
element->jeton_act = NULL;
|
|
||||||
element->suivant = NULL;
|
element->suivant = NULL;
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
@ -11,9 +9,56 @@ Element *nouvel_element(void) {
|
||||||
Liste *nouvelle_liste(void) {
|
Liste *nouvelle_liste(void) {
|
||||||
Liste *liste = malloc(sizeof(Liste));
|
Liste *liste = malloc(sizeof(Liste));
|
||||||
liste->premier = NULL;
|
liste->premier = NULL;
|
||||||
|
|
||||||
return liste;
|
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) {
|
void free_liste(Liste *liste) {
|
||||||
Element *actuel = liste->premier;
|
Element *actuel = liste->premier;
|
||||||
while (actuel) {
|
while (actuel) {
|
||||||
|
|
Reference in a new issue