Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fmela/libdict
C library of key-value data structures.
https://github.com/fmela/libdict
associative-array avl-tree binarytree c data-structures dictionary hashing hashtable iterator key-value map redblacktree skiplist splay-trees treaps tree
Last synced: 16 days ago
JSON representation
C library of key-value data structures.
- Host: GitHub
- URL: https://github.com/fmela/libdict
- Owner: fmela
- License: bsd-2-clause
- Created: 2010-02-13T20:16:56.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2020-03-22T05:30:55.000Z (over 4 years ago)
- Last Synced: 2024-07-31T22:55:25.734Z (3 months ago)
- Topics: associative-array, avl-tree, binarytree, c, data-structures, dictionary, hashing, hashtable, iterator, key-value, map, redblacktree, skiplist, splay-trees, treaps, tree
- Language: C
- Homepage:
- Size: 690 KB
- Stars: 282
- Watchers: 28
- Forks: 72
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# libdict
[![Build Status](https://travis-ci.org/fmela/libdict.svg?branch=master)](https://travis-ci.org/fmela/libdict)
libdict is a C library that provides the following data structures with efficient insert, lookup, and delete routines:
* [height-balanced (AVL) tree](http://en.wikipedia.org/wiki/AVL_tree)
* [red-black tree](http://en.wikipedia.org/wiki/Red-black_tree)
* [splay tree](http://en.wikipedia.org/wiki/Splay_tree)
* [weight-balanced tree](https://en.wikipedia.org/wiki/Weight-balanced_tree)
* [path-reduction tree](https://cs.uwaterloo.ca/research/tr/1982/CS-82-07.pdf)
* [treap](http://en.wikipedia.org/wiki/Treap)
* [hashtable using separate chaining](http://en.wikipedia.org/wiki/Hashtable#Separate_chaining)
* [hashtable using open addressing with linear probing](http://en.wikipedia.org/wiki/Hashtable#Open_addressing)
* [skip list](https://en.wikipedia.org/wiki/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.
## License
libdict is released under the simplified BSD [license](LICENSE).