libdict is a C library that provides the following data structures with efficient insert, lookup, and delete routines:
- height-balanced (AVL) tree
- red-black tree
- splay tree
- weight-balanced tree
- path-reduction tree
- treap
- hashtable using separate chaining
- hashtable using open addressing with linear probing
- skip list
All data structures in this library support insert, search, and remove, and have bidirectional iterators. The sorted data structures (everything but hash tables) support near-search operations: searching for the key greater or equal to, strictly greater than, lesser or equal to, or strictly less than, a given key. The tree data structures also support the selecting the nth element; this takes linear time, except in path-reduction and weight-balanced trees, where it only takes logarithmic time.
The API and code are written with efficiency as a primary concern. For example, an insert call returns a boolean indicating whether or not the key was already present in the dictionary (i.e. whether there was an insertion or a collision), and a pointer to the location of the associated data. Thus, an insert-or-update operation can be supported with a single traversal of the data structure. In addition, almost all recursive algorithms have been rewritten to use iteration instead.
libdict is released under the simplified BSD license.