Classe / biblioteca de contêineres para C

Alguém sabe de alguma biblioteca de contêineres C? Eu estou procurando por algo que fornece implementações padrão de listas vinculadas, matrizes, tabelas de hash etc, da mesma forma que o C ++ STL faz. As principais preocupações são:

  1. O código do cliente deve ser capaz de criar contêineres para vários tipos de dados diferentes sem modificar a biblioteca.
  2. A interface para criar e usar os contêineres deve ser intuitiva.

Acabei de encontrar o SGLIB enquanto procurava por uma implementação C de um contêiner de mapa / dictionary. Infelizmente, nenhum mapa, mas parece include os recipientes que você perguntou. Eu não tenho ideia de como é bom.

http://sglib.sourceforge.net .

Chuck Falconer tem uma biblioteca hash decente escrita em C que inclui uma interface C ++, clique em hashlib.zip na página da web para fazer o download.

Ben Pfaff tem uma biblioteca de tree binária e balanceada muito boa e extremamente bem documentada, o GNU libavl , que implementa a maioria das estruturas de trees principais, incluindo trees de busca binárias, trees AVL, trees vermelhas e pretas e versões encadeadas de cada uma.

A libavl é licenciada sob o LGPL (a partir da versão 2.0.3), o hashlib é GPL.

Eu não tenho certeza do que você está procurando, tanto quanto os arrays e as listas encadeadas vão como o primeiro é suportado diretamente pela linguagem e o último é geralmente trivial o suficiente para implementar sem garantir uma biblioteca.

Sglib é uma excelente biblioteca de estruturas de dados genéricos. A biblioteca atualmente fornece implementação genérica para:

  • ordenando matrizes
  • listas encadeadas
  • listas encadeadas ordenadas
  • listas duplas ligadas
  • trees vermelho-preto
  • contentores com hash

É muito rápido. Mais rápido que simplificado. É inspirado pela Biblioteca de Modelos Padrão. Baixe aqui

Outra solução é o software Attractive Chaos . Biblioteca de macros C:
kbtree.h: biblioteca B-tree eficiente em C.
khash.h: biblioteca de tabelas hash rápida e leve em C.
kvec.h: contêiner vetorial simples em C.

Kulesh Shanmugasundaram apresenta a linked list genérica do kernel do Linux e uma tabela de hash genérica baseada na linked list do kernel do Linux.

Os softwares Sglib e Attractive Chaos e o Linux Linked Kernel List são bibliotecas de macros C. Usar void* para implementar contêineres genéricos em C pode ser ineficiente. Macros C imitam modelos C ++ e são tão eficientes quanto um modelo C ++.

Como cerca de ccl? Esta é uma biblioteca de contêineres para C. Talvez seja a melhor opção para você. Você pode ver https://code.google.com/p/ccl/ . Aproveite.

Eu tenho usado uma biblioteca que venho desenvolvendo a partir do livro “C Interface and Implementations” da Hanson. Sua fonte está disponível para download em

site do livro cii

Tudo é um tipo de dados abstrato. Há lista, conjunto, tabela (mapa).

#include "queue.h" para obter access às implementações de listas ligadas individualmente, filas traseiras ligadas individualmente, listas e filas posteriores.

Eu encontrei um cache genérico para armazenar objects arbitrários na memory por DJ Bernstein ( http://cr.yp.to/djbdns.html ) para ser limpo, simples e super rápido. Procure em cache.h e cache.c no tarj do djdns.

Alguns dos que eu ouvi falar (mas nunca usei) são

  • Glib
  • Biblioteca de funções padrão do iMatix
  • elementos diferentes dos headers do kernel do Linux (por exemplo, lista)

Isso parece cobrir a maioria dos contêineres e alguns algoritmos. Também não há licenciamento, todos os headers contêm – ‘código pode ser usado sem restrição’. http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=13867&lngWId=3