Les implémentations standard de la bibliothèque C, en particulier glibc (la bibliothèque GNU C) fournissent des listes liées, empilent des structures de données et autres, ou devons-nous rouler les nôtres?
Merci.
La norme C ne fournit pas de structures de données telles que la liste liée et la pile. Certaines implémentations de compilateurs peuvent fournir leurs propres versions mais leur utilisation ne sera pas portable sur différents compilateurs.
Alors oui, vous devez écrire le vôtre.
La norme C ne le fait pas, la glibc fournit cependant des listes, des queues de queue et des queues circulaires dans <sys/queue.h>
selon la page de manuel queue celles-ci proviennent de BSD et non de POSIX.
Il y a des tables de hachage, des arbres binaires et des trucs de recherche binaire dans la glibc. Ceux-ci font partie des normes C89, C99 et/ou POSIX.1. Une raison pour laquelle la liste liée n'est pas là.
Plus d'informations dans les pages de manuel: hsearch , tsearch and bsearch
Remarque: Certains d'entre eux ont une mauvaise conception. Par exemple: hsearch
n'autorise qu'une seule table de hachage par processus. Le compilateur GNU, gcc/glibc, fournit des versions réentrantes hcreate_r
, hsearch_r
, et hdestroy_r
qui autorisent plusieurs tables de hachage. Voir aussi Stack Overflow's Comment utiliser hcreate_r
.
Comme d'autres réponses l'ont déjà dit, il n'y a pas de bibliothèque de listes chaînées dans la bibliothèque standard.
J'en ai écrit un pour mon usage il y a quelque temps. Vous pouvez l'utiliser librement ou utiliser le code comme référence.
Vous pouvez le trouver ici: libllist
Il y a une implémentation de table de hachage dans POSIX (et GLibc); voir les pages de manuel pour hcreate/hdestroy/hsearch.
Mais, comme mentionné, l'utilisation de glib est probablement le moyen le plus simple de vous éviter de réimplémenter la structure de données de base.