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