web-dev-qa-db-fra.com

La bibliothèque c standard fournit-elle une liste de liens, etc. des structures de données?

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.

47
rsjethani

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.

18
Alok Save

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.

22
iabdalkader

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 .

20
SKi

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

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

5
Rahul Tripathi

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

2
stdcall

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.

2
djcb