Ответ 1
Я просто наткнулся на SGLIB, ища C-реализацию контейнера карт/словарей. К сожалению, нет карты, но она, кажется, включает в себя контейнеры, о которых вы просили. Я не знаю, насколько это хорошо.
Кто-нибудь знает о каких-либо библиотеках контейнеров C? Я ищу что-то, что дает стандартные реализации связанных списков, массивов, хэш-таблиц и т.д., Так же, как это делает С++ STL. Основные проблемы:
Я просто наткнулся на SGLIB, ища C-реализацию контейнера карт/словарей. К сожалению, нет карты, но она, кажется, включает в себя контейнеры, о которых вы просили. Я не знаю, насколько это хорошо.
Chuck Falconer имеет приличную библиотеку хэша, написанную на C, которая включает в себя интерфейс С++, нажмите на hashlib.zip на веб-странице для загрузки.
Бен Пфафф имеет очень красивую и чрезвычайно хорошо документированную двоичную и сбалансированную библиотеку деревьев, GNU libavl, который реализует большинство основных древовидных структур, включая двоичные деревья поиска, деревья AVL, красно-черные деревья и поточные версии каждого из них.
libavl лицензируется под LGPL (начиная с версии 2.0.3), hashlib - это GPL.
Я не уверен, что вы ищете, поскольку массивы и связанные списки идут, поскольку первая поддерживается непосредственно языком, а последняя, как правило, достаточно тривиальна для реализации без оправдания библиотеки.
Sglib - отличная библиотека общих данных. В настоящее время библиотека предоставляет общую реализацию для:
Это очень быстро. Быстрее, чем блеск. Он вдохновлен стандартной библиотекой шаблонов. Загрузить здесь
Другим решением является Привлекательный сотовый код хаоса. Библиотека макросов C:
kbtree.h: эффективная библиотека B-дерева в C.
khash.h: быстрая и легкая хэш-таблица библиотеки в C.
kvec.h: простой векторный контейнер в C.
Kulesh Shanmugasundaram представляет общий набор связанного списка ядра ядра Linux и общую таблицу хэша, основанную на Linked List ядра Linux.
Sglib и Attractive Chaos sotware и связанный список ядра Linux представляют собой макрокоманды C. Использование void*
для реализации общих контейнеров в C может быть неэффективным. C макросов имитируют С++-шаблоны и эффективны как С++-шаблон.
Как насчет ccl? Это контейнерная библиотека для C. Возможно, она лучше всего подходит вам. Вы можете увидеть https://code.google.com/p/ccl/. Наслаждайтесь этим.
Я использую библиотеку, которую я выращиваю из книги Хэнсона "Интерфейс и реализация". Его источник можно загрузить в
Все является абстрактным типом данных. Существует список, набор, таблица (карта).
#include "queue.h"
, чтобы получить доступ к реализациям односвязных списков, односвязных хвостовых очередей, списков и хвостовых очередей.
Я нашел общий кэш для хранения произвольных объектов в памяти DJ Bernstein (http://cr.yp.to/djbdns.html), чтобы быть чистым, простым и супер быстро. Посмотрите cache.h и cache.c в tar файле djdns.
Некоторые из тех, о которых я слышал (но никогда не использовали),
Это похоже на большинство контейнеров и некоторые алгоритмы. Также нет лицензии, все заголовки содержат - "код может использоваться без ограничений". http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=13867&lngWId=3