Имеют ли стандартные реализации библиотеки C, особенно glibc (библиотека GNU C), предоставляют связанные списки, stack et al. структуры данных, или нам нужно сворачивать свои собственные?
Спасибо.
Имеют ли стандартные реализации библиотеки C, особенно glibc (библиотека GNU C), предоставляют связанные списки, stack et al. структуры данных, или нам нужно сворачивать свои собственные?
Спасибо.
Стандарт C не предоставляет структуры данных, такие как связанный список и стек. Некоторые реализации компилятора могут предоставлять свои собственные версии, но их использование будет не переносимым для разных компиляторов.
Итак, вы должны написать свой собственный.
В стандарте C нет, glibc, тем не менее, предоставляет списки, хвостовые очереди и круговые очереди в <sys/queue.h>
в соответствии с queue man-страницами, которые поступают из BSD, а не POSIX.
В glibc есть хеш-таблицы, бинарные деревья и бинарные файлы поиска. Это часть стандартов C89, C99 и/или POSIX.1. В некоторых случаях связанный список отсутствует.
Дополнительная информация с man-страниц: hsearch, tsearch и bsearch
Примечание: Некоторые из них имеют плохую конструкцию. Например: hsearch
разрешает только одну хеш-таблицу для каждого процесса. Компилятор GNU, gcc/glibc, предоставляет реентерабельные версии hcreate_r
, hsearch_r
и hdestroy_r
, которые позволяют использовать несколько хеш-таблиц. См. Также Переполнение стека Как использовать hcreate_r
.
Поскольку C не предоставляет структуры данных, но вы можете использовать glib, предоставленный Gnome
Queue.h ad Tree.h также предоставляет вы некоторые структуры данных
Как уже было сказано, в стандартной библиотеке нет библиотеки связанных списков.
Я написал один для своего собственного использования некоторое время назад. Вы можете свободно использовать его или использовать код в качестве ссылки.
Вы можете найти его здесь: libllist
Существует реализация хеш-таблицы в POSIX (и GLibc); см. man файлы для hcreate/hdestroy/hsearch.
Но, как уже упоминалось, использование glib - это, вероятно, самый простой способ спасти себя от переопределения базовой структуры данных.