La bibliothèque standard c fournit-elle des structures de données de liste chaînée, etc.

Les implémentations standard de la bibliothèque C, en particulier la glibc (la bibliothèque GNU C), fournissent des listes liées, stack et al. structures de données, ou devons-nous rouler les nôtres?

Merci.

Le standard C ne fournit pas de structures de données telles que la liste chaînée et la stack. Certaines implémentations de compilateurs peuvent fournir leurs propres versions, mais leur utilisation ne sera pas portable entre différents compilateurs.

Donc, oui, vous devez écrire le vôtre.

Le standard C ne le fait pas, mais glibc fournit des listes, des files d’attente et des files d’attente circulaires dans selon la page du de files d’attente provenant de BSD et non de POSIX.

Il existe des tables de hachage, des arbres binarys et des éléments de recherche binarys dans la glibc. Celles-ci font partie des normes C89, C99 et / ou POSIX.1. Certaines listes de liens de raison ne sont pas là.

Plus d’infos sur les pages de manuel : hsearch , tsearch et bsearch

Note: 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 les 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 .

En tant que tel, C ne fournit pas de structures de données mais vous pouvez utiliser la glib fournie par Gnome.

Queue.h ad Tree.h vous fournit également des structures de données

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 d’éviter de réimplémenter la structure de données de base.

Comme d’autres réponses l’ont déjà indiqué, la bibliothèque standard ne contient pas de bibliothèque de listes chaînées.

J’en ai écrit un pour mon usage personnel il y a quelque temps. Vous pouvez librement l’utiliser ou utiliser le code comme référence.

Vous pouvez le trouver ici: libllist