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 */
|
||||
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;
|
||||
|
|
49
src/liste.c
49
src/liste.c
|
@ -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) {
|
||||
|
|
Reference in a new issue