127

I'm looking for a C library with common reusable data structures like linked lists, hash tables etc. Something like the source distributed with Mastering Algorithms with C (Paperback) by Kyle Loudon.

Vasil
  • 36,468
  • 26
  • 90
  • 114

8 Answers8

62

BSD queue.h has:

  • SLIST = singly linked list
  • LIST = doubly linked list
  • SIMPLEQ = singly linked queue
  • TAILQ = doubly linked queue

BSD tree.h has:

  • RB - red-black tree
  • SPLAY - splay tree

See the queue(3) and tree(3) man pages for details. I really like them because they are pure C macros without dependencies (not even libc). Plus with the BSD license you don't have to worry about any company restrictions w/ GPL.

cnst
  • 25,870
  • 6
  • 90
  • 122
HUAGHAGUAH
  • 1,836
  • 10
  • 7
39

Gnome provides an excellent library for this, called Glib, with many useful data structures and other utilities as well.

u0b34a0f6ae
  • 48,117
  • 14
  • 92
  • 101
Emil H
  • 39,840
  • 10
  • 78
  • 97
32

gnulib, the gnu portability library.

It's distributed as source code. This list is from its module list, which includes a TON of other things. One interesting one is "c-stack: Stack overflow handling, causing program exit."

  • list
  • array-list
  • carray-list
  • linked-list
  • avltree-list
  • rbtree-list
  • linkedhash-list
  • avltreehash-list
  • rbtreehash-list
  • sublist ( Sequential list data type backed by another list. )
  • oset (Abstract ordered set.)
  • array-oset
  • avltree-oset
  • rbtree-oset
Ian Kelling
  • 9,643
  • 9
  • 35
  • 39
21

SGLIB is an excellent generic data-structures library. The library currently provides generic implementations for:
sorting arrays
linked lists
sorted linked lists
double linked lists
red-black trees
hashed containers

It's very fast, faster than glib. It's inspired by the Standard Template Library. Download Here

Another solution is Attractive Chaos software. C macro library:
kbtree.h: efficient B-tree library in C.
khash.h: fast and light-weighted hash table library in C.
kvec.h: simple vector container in C.

Sglib and Attractive Chaos software are C macros library. Using void* to implement generic containers in C may be inefficient. C macros mimics C++ template and are as efficient as C++ template

Caleb Hattingh
  • 9,005
  • 2
  • 31
  • 44
Lear
  • 1,893
  • 2
  • 13
  • 9
5

The GDSL Library might be a good thing to consider:

http://home.gna.org/gdsl/

luis.espinal
  • 10,331
  • 6
  • 39
  • 55
3

The Apache Portable Runtime.

Jaap
  • 31
  • 1
-1

CLIB

Avinash
  • 12,851
  • 32
  • 116
  • 186
-4

AT&T's software tools.

Robert Harvey
  • 178,213
  • 47
  • 333
  • 501
zvrba
  • 24,186
  • 3
  • 55
  • 65