Подтвердить что ты не робот

Поддерживает ли стандартная библиотека c связанный список и т.д. Структуры данных?

Имеют ли стандартные реализации библиотеки C, особенно glibc (библиотека GNU C), предоставляют связанные списки, stack et al. структуры данных, или нам нужно сворачивать свои собственные?

Спасибо.

4b9b3361

Ответ 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 - это, вероятно, самый простой способ спасти себя от переопределения базовой структуры данных.