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