2008-11-20 2 views
69

Кто-нибудь знает о каких-либо библиотеках контейнеров C? Я ищу что-то, что дает стандартные реализации связанных списков, массивов, хэш-таблиц и т. Д., Так же, как это делает C++ STL. Ключевыми проблемами являются:Контейнерный класс/Библиотека для C

  1. Клиентский код должен иметь возможность создавать контейнеры для нескольких разных типов данных без изменения библиотеки.
  2. Интерфейс для создания и использования контейнеров должен быть интуитивным.
+24

Почему именно это считается не по теме? Это, безусловно, относится к категории «программных инструментов, обычно используемых программистами», поскольку библиотека кода (особенно такого рода) является одним из самых простых инструментов, которые программист использовал бы. Кроме того, похоже, что вопрос о проблемах связан с этим вопросом как «дубликаты», что дает мне понять, что это обычно запрашиваемая информация. – 2013-08-16 13:59:22

+10

Мне всегда смешно видеть, что многие из закрытых вопросов так полезны, по крайней мере, для меня (со многими голосами !!!) И для меня это похоже на тему по этому вопросу !! – Ivan 2013-12-17 09:07:02

+0

GLib довольно хорошо и предоставляет [связанные списки] (https://developer.gnome.org/glib/2.38/glib-Doubly-Linked-Lists.html), [хеш-таблицы] (https: //developer.gnome .org/glib/2.38/glib-Hash-Tables.html) и многое другое. Вы также можете использовать пользовательские хеш-функции и управлять памятью своих записей. Синтаксис сначала немного подробный, но если вы привыкнете к нему, он красиво объектно-ориентирован. – jdm 2014-01-17 12:13:31

ответ

22

Я только что наткнулся на SGLIB, ища C-реализацию контейнера карт/словарей. К сожалению, нет карты, но она, кажется, включает в себя контейнеры, о которых вы просили. Я понятия не имею, насколько это хорошо.

http://sglib.sourceforge.net.

10

Chuck Falconer имеет достойную библиотеку хэша, написанную на C, которая включает в себя интерфейс C++, нажмите на hashlib.zip на веб-странице для загрузки.

Ben Pfaff имеет очень хорошо документированную двоичную и сбалансированную библиотеку деревьев, GNU libavl, которая реализует большинство основных древовидных структур, включая деревья двоичного поиска, деревья AVL, красно-черные деревья и поточные версии каждого из них.

libavl имеет лицензию под LGPL (начиная с версии 2.0.3), hashlib - это GPL.

Я не уверен, что вы ищете, поскольку массивы и связанные списки идут, поскольку первая поддерживается непосредственно языком, а последняя, ​​как правило, достаточно тривиальна для реализации, не требуя библиотеки.

5

Я использую библиотеку, которую я выращиваю из книги Хэнсона «Интерфейс и реализация C». Его источник можно скачать на

cii book website

Все это абстрактный тип данных. Существует список, набор, таблица (карта).

2

#include "queue.h", чтобы получить доступ к реализации одноуровневых списков, поочередно связанных хвостовых очередей, списков и хвостовых очередей.

Я нашел общий кэш для хранения произвольных объектов в памяти Д. Дж. Бернштейна (http://cr.yp.to/djbdns.html), который был бы чистым, простым и супер быстрым. Посмотрите cache.h и cache.c в djdns tarball.

6

Sglib является отличной библиотекой структур данных. Библиотека в настоящее время обеспечивает общую реализацию для:

  • сортировочных массивов
  • связанных списков
  • упорядоченных связных списки
  • двойных связанных списков
  • красно-черных дерева
  • хэшированных контейнеры

Это очень быстро. Быстрее, чем блеск. Он вдохновлен стандартной библиотекой шаблонов.Download here

Другое решение - Attractive Chaos sotware. С макро библиотека:
kbtree.h: эффективная библиотека Б-дерево в C.
khash.h: быстрый и легкий-взвешенный хэш-таблицу в библиотеку C.
kvec.h: простой вектор контейнер в С.

Kulesh Shanmugasundaram представляет общий набор связанного списка ядра ядра Linux и общую таблицу хэшей, основанный на Linked List ядра ядра Linux.

Sglib and Attractive Chaos sotware и связанный список ядра Linux представляют собой макрокоманды C. Использование void* для реализации общих контейнеров в C может быть неэффективным. C macm имитируют C++-шаблоны и эффективны как C++-шаблон.

2

Некоторые из тех, что я слышал (но никогда не используется) являются

  • Glib
  • iMatix Стандартная библиотека функций
  • разнородные элементы из заголовков ядра Linux (например, список)
7

Как насчет ccl? Это контейнерная библиотека для C. Возможно, это лучше всего подходит вам. Вы можете увидеть https://code.google.com/p/ccl/. Наслаждайтесь этим.

Смежные вопросы