Partie Bonus - Gregory-Marquiset/gm_libft GitHub Wiki
Fonctions Bonus de la Libft
Cette section couvre les fonctions bonus de la bibliothèque Libft. Chaque fonction est décrite en détail pour fournir une compréhension claire de son utilité, de sa logique, et de son contexte d'utilisation.
🛠️ Création et manipulation de listes chaînées
ft_lstnew
-
Prototype :
t_list *ft_lstnew(void *content);
-
But de la fonction : La fonction
ft_lstnew
alloue (avecmalloc
) et retourne un nouvel élément de liste. Le membrecontent
est initialisé avec la valeur du paramètrecontent
. Le membrenext
est initialisé àNULL
. -
Contexte d'utilisation : Utile pour créer un nouvel élément de liste chaînée, servant de point de départ pour une nouvelle liste ou à ajouter à une liste existante.
-
Logique du code :
- Allouer de la mémoire pour un nouvel élément de type
t_list
. - Initialiser le membre
content
avec la valeur fournie en paramètre. - Initialiser le membre
next
àNULL
pour indiquer que cet élément ne pointe vers aucun autre. - Retourner le pointeur vers le nouvel élément.
- Lien vers la documentation officielle : ft_lstnew — Guide 42
ft_lstadd_front
-
Prototype :
void ft_lstadd_front(t_list **lst, t_list *new);
-
But de la fonction : La fonction
ft_lstadd_front
ajoute l'élémentnew
au début de la liste pointée parlst
. -
Contexte d'utilisation : Utile pour insérer un nouvel élément en tête d'une liste chaînée, modifiant ainsi le point d'entrée de la liste.
-
Logique du code :
- Vérifier que les pointeurs
lst
etnew
ne sont pasNULL
. - Faire pointer le membre
next
denew
vers l'ancien premier élément de la liste. - Mettre à jour le pointeur
lst
pour qu'il pointe versnew
, faisant de lui le nouveau premier élément.
- Lien vers la documentation officielle : ft_lstadd_front — Guide 42
ft_lstadd_back
-
Prototype :
void ft_lstadd_back(t_list **lst, t_list *new);
-
But de la fonction : La fonction
ft_lstadd_back
ajoute l'élémentnew
à la fin de la liste pointée parlst
. -
Contexte d'utilisation : Utile pour ajouter un nouvel élément à la fin d'une liste chaînée, étendant ainsi la liste sans modifier son début.
-
Logique du code :
- Vérifier que les pointeurs
lst
etnew
ne sont pasNULL
. - Si la liste est vide (
*lst
estNULL
), assignernew
comme premier élément. - Sinon, parcourir la liste jusqu'au dernier élément.
- Faire pointer le membre
next
du dernier élément versnew
.
- Lien vers la documentation officielle : ft_lstadd_back — Guide 42
ft_lstsize
-
Prototype :
int ft_lstsize(t_list *lst);
-
But de la fonction : La fonction
ft_lstsize
compte le nombre d'éléments dans la liste pointée parlst
. -
Contexte d'utilisation : Utile pour déterminer la longueur d'une liste chaînée, par exemple pour des opérations nécessitant la connaissance du nombre d'éléments.
-
Logique du code :
- Initialiser un compteur à zéro.
- Parcourir la liste en incrémentant le compteur pour chaque élément rencontré.
- Retourner la valeur du compteur après avoir traversé la liste.
- Lien vers la documentation officielle : ft_lstsize — Guide 42
ft_lstlast
-
Prototype :
t_list *ft_lstlast(t_list *lst);
-
But de la fonction : La fonction
ft_lstlast
retourne le dernier élément de la liste pointée parlst
. -
Contexte d'utilisation : Utile pour accéder rapidement au dernier élément d'une liste chaînée, notamment avant d'ajouter un nouvel élément à la fin.
-
Logique du code :
- Vérifier que
lst
n'est pasNULL
. - Parcourir la liste jusqu'à atteindre l'élément dont le membre
next
estNULL
. - Retourner un pointeur vers cet élément, qui est le dernier de la liste.
- Lien vers la documentation officielle : ft_lstlast — Guide 42
🧹 Gestion mémoire et itération des listes chaînées
ft_lstdelone
-
Prototype :
void ft_lstdelone(t_list *lst, void (*del)(void *));
-
But de la fonction : La fonction
ft_lstdelone
libère la mémoire d'un élément de liste chaînée en utilisant la fonctiondel
pour libérer le contenu, puis en libérant l'élément lui-même. Le champnext
de l'élément n'est pas affecté. -
Contexte d'utilisation : Utile pour supprimer un élément spécifique d'une liste chaînée sans affecter les autres éléments, notamment lors de la gestion dynamique de structures de données.
-
Logique du code :
- Vérifier que l'élément
lst
et la fonctiondel
ne sont pasNULL
. - Appliquer la fonction
del
au contenu de l'élément (lst->content
) pour le libérer. - Libérer la mémoire de l'élément lui-même en utilisant
free(lst)
. - Ne pas toucher au champ
next
de l'élément, car il ne doit pas être libéré.
- Lien vers la documentation officielle : ft_lstdelone — Guide 42
ft_lstclear
-
Prototype :
void ft_lstclear(t_list **lst, void (*del)(void *));
-
But de la fonction : La fonction
ft_lstclear
supprime et libère la mémoire de l'élément pointé parlst
et de tous ses successeurs, en utilisant la fonctiondel
pour le contenu, puis en libérant chaque élément. Enfin, le pointeur initial est mis àNULL
. -
Contexte d'utilisation : Utile pour vider entièrement une liste chaînée et libérer toutes les ressources associées, par exemple lors de la réinitialisation de structures de données ou avant de quitter un programme pour éviter les fuites de mémoire.
-
Logique du code :
- Vérifier que le pointeur
lst
et la fonctiondel
ne sont pasNULL
. - Parcourir la liste :
- Sauvegarder le pointeur vers l'élément suivant.
- Utiliser
ft_lstdelone
pour supprimer l'élément actuel en appliquantdel
à son contenu. - Passer à l'élément suivant en utilisant le pointeur sauvegardé.
- Après la boucle, mettre le pointeur initial
lst
àNULL
pour indiquer que la liste est vide.
- Lien vers la documentation officielle : ft_lstclear — Guide 42
ft_lstiter
-
Prototype :
void ft_lstiter(t_list *lst, void (*f)(void *));
-
But de la fonction : La fonction
ft_lstiter
parcourt la listelst
et applique la fonctionf
au contenu de chaque élément. -
Contexte d'utilisation : Utile pour effectuer une opération sur chaque élément d'une liste chaînée, comme l'affichage des contenus, la modification des données ou l'application d'une transformation spécifique.
-
Logique du code :
- Vérifier que le pointeur
lst
et la fonctionf
ne sont pasNULL
. - Parcourir chaque élément de la liste :
- Appliquer la fonction
f
au contenu de l'élément (lst->content
). - Passer à l'élément suivant (
lst = lst->next
).
- Appliquer la fonction
- Continuer jusqu'à ce que la fin de la liste soit atteinte (
lst
devientNULL
).
- Lien vers la documentation officielle : ft_lstiter — Guide 42
ft_lstmap
-
Prototype :
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *));
-
But de la fonction : La fonction
ft_lstmap
parcourt la listelst
, applique la fonctionf
au contenu de chaque élément, et crée une nouvelle liste résultant des applications successives def
. La fonctiondel
est utilisée pour supprimer le contenu d'un élément en cas d'échec. -
Contexte d'utilisation : Utile pour créer une nouvelle liste chaînée en transformant les contenus de la liste existante selon une fonction donnée, tout en gérant proprement les erreurs potentielles liées à l'allocation de mémoire.
-
Logique du code :
- Vérifier que les pointeurs
lst
,f
etdel
ne sont pasNULL
. - Initialiser un pointeur pour la nouvelle liste (
new_list
) àNULL
. - Parcourir chaque élément de la liste originale :
- Appliquer la fonction
f
au contenu de l'élément actuel. - Créer un nouvel élément avec le contenu transformé en utilisant
ft_lstnew
. - Si la création échoue, utiliser
ft_lstclear
avecdel
pour nettoyer la nouvelle liste et retournerNULL
. - Ajouter le nouvel élément à la fin de la nouvelle liste en utilisant
ft_lstadd_back
.
- Appliquer la fonction
- Continuer jusqu'à la fin de la liste originale.
- Retourner le pointeur vers la nouvelle liste.
- Lien vers la documentation officielle : ft_lstmap — Guide 42