#include <stdio.h> // pas besoin
#include <stdlib.h> // ne pas oublier
// #include "ft_list.h"
// (*f)(list_ptr->data);
typedef struct s_list
{
struct s_list *next;
void *data;
} t_list;
void ft_list_foreach(t_list *begin_list, void (*f)(void *))
{
t_list *list_ptr = begin_list; // ici *list_ptr car argument *begin_list on veut que ce soit des ptr sur les noeuds!!!
while (list_ptr) // ici ptr sur le noeuds
{
(*f)(list_ptr->data); // (*f) car aussi déclaré comme ça dans l argument, on accède a la data
list_ptr = list_ptr->next;
}
}
// Fonction à appliquer sur chaque élément (ex: affichage d'un entier)
void print_data(void *data) // void data comme argument car structure est de data est de type void * (générique peut prendre int, char, ...)
{
printf("%d\n", *(int *)data); // comme on met des int en data il faut ici caster (int *)data, sinon ne peutg pas printf
}
// Fonction pour créer un nouvel élément de la liste
t_list *create_elem(void *data)
{
t_list *new_elem = malloc(sizeof(t_list));
if (!new_elem)
return NULL;
new_elem->data = data;
new_elem->next = NULL;
return new_elem;
}
// Test de la fonction ft_list_foreach
int main()
{
int a = -10, b = 20, c = 300;
t_list *elem1 = create_elem(&a); // t_list *elem1 = create_elem('-10'); ne fonctionne pas
t_list *elem2 = create_elem(&b); // il faut déclarer les variable ensuite passer l adresse
t_list *elem3 = create_elem(&c);
elem1->next = elem2; // ici je lie les élément avant tous on des next->NULL, mtn ils sont linké
elem2->next = elem3;
printf("Liste des éléments :\n");
ft_list_foreach(elem1, print_data);
// Libération de la mémoire
free(elem1);
free(elem2);
free(elem3);
return 0;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: