From bd96dfdc8f5b2f33b6b88b9ab690ad46ec86ac0c Mon Sep 17 00:00:00 2001
From: Leonardo
Easy to use, header only, macro generated, generic and type-safe Collections in C.
+Easy to use, header only, macro generated, generic and type-safe Data Structures in C.
@@ -48,29 +48,40 @@
* Linear Collections
* List, LinkedList, Deque, Stack, Queue, SortedList
* Sets
- * HashSet, TreeSet, MultiSet
+ * HashSet, TreeSet, HashMultiSet
* Maps
- * BidiMap, HashMap, TreeMap, MultiMap
+ * HashMap, TreeMap, HashMultiMap
+* Bidirectional Maps
+ * HashBidiMap
* Heaps
* Heap, IntervalHeap
+* WIP
+ * BitSet, Matrix, TreeBidiMap, TreeMultiMap, TreeMultiSet
+
+__The following table is an overview of all the currently available or upcoming data structures__:
| Collection
| Abstract Data Type
| Data Structure
| Details |
| :--------------------------------: | :---------------------------------: | :-----------------------------: | :-----------------------------------: |
-| BidiMap
_bidimap.h_ | Bidirectional Map | Two Hashtables | A bijection between two sets of unique keys and unique values `K <-> V` using two hashtables |
-| Deque
_deque.h_ | Double-Ended Queue | Dynamic Circular Array | A circular array that allows `push` and `pop` on both ends (only) at constant time |
-| HashMap
_hashmap.h_ | Map | Hashtable | A unique set of keys associated with a value `K -> V` with constant time look up using a hashtable with open addressing and robin hood hashing |
-| HashSet
_hashset.h_ | Set | Hashtable | A unique set of values with constant time look up using a hashtable with open addressing and robin hood hashing |
-| Heap
_heap.h_ | Priority Queue | Dynamic Array | A binary heap as a dynamic array as an implicit data structure |
-| IntervalHeap
_intervalheap.h_ | Double-Ended Priority Queue | Custom Dynamic Array | A dynamic array of nodes, each hosting one value from the MinHeap and one from the MaxHeap |
-| LinkedList
_linkedlist.h_ | List | Doubly-Linked List | A default doubly-linked list |
-| List
_list.h_ | List | Dynamic Array | A dynamic array with `push` and `pop` anywhere on the array |
-| MultiMap
_multimap.h_ | Multimap | Custom Hashtable | A mapping of multiple keys with one node per key using a hashtable with separate chaining |
-| Multiset
_multiset.h_ | Multiset | Hashtable | A mapping of a value and its multiplicity using a hashtable with open addressing and robin hood hashing |
-| Queue
_queue.h_ | FIFO | Dynamic Circular Array | A queue using a circular array with `enqueue` at the `back` index and `dequeue` at the `front` index |
-| SortedList
_sortedlist.h_ | Sorted List | Sorted Dynamic Array | A lazily sorted dynamic array that is sorted only when necessary |
-| Stack
_stack.h_ | FILO | Dynamic Array | A stack with push and pop at the end of a dynamic array |
-| TreeMap
_treemap.h_ | Sorted Map | AVL Tree | A unique set of keys associated with a value `K -> V` using an AVL tree with `log(n)` look up and sorted iteration |
-| TreeSet
_treeset.h_ | Sorted Set | AVL Tree | A unique set of keys using an AVL tree with `log(n)` look up and sorted iteration |
+| BitSet
_bitset.h_ | Set | Dynamic Array | A set of bits that can be individually modified and queried, each identified by a bit index |
+| Deque
_deque.h_ | Double-Ended Queue | Dynamic Circular Array | A circular array that allows `push` and `pop` on both ends (only) at constant time |
+| HashBidiMap
_hashbidimap.h_ | Bidirectional Map | Two Hashtables | A bijection between two sets of unique keys and unique values `K <-> V` using two hashtables |
+| HashMap
_hashmap.h_ | Map | Flat Hashtable | A unique set of keys associated with a value `K -> V` with constant time look up using a hashtable with open addressing and robin hood hashing |
+| HashMultiMap
_hashmultimap.h_ | Multimap | Hashtable | A mapping of multiple keys with one node per key using a hashtable with separate chaining |
+| HashMultiSet
_hashmultiset.h_ | Multiset | Flat Hashtable | A mapping of a value and its multiplicity using a hashtable with open addressing and robin hood hashing |
+| HashSet
_hashset.h_ | Set | Flat Hashtable | A unique set of values with constant time look up using a hashtable with open addressing and robin hood hashing |
+| Heap
_heap.h_ | Priority Queue | Dynamic Array | A binary heap as a dynamic array as an implicit data structure |
+| IntervalHeap
_intervalheap.h_ | Double-Ended Priority Queue | Custom Dynamic Array | A dynamic array of nodes, each hosting one value from the MinHeap and one from the MaxHeap |
+| LinkedList
_linkedlist.h_ | List | Doubly-Linked List | A default doubly-linked list |
+| List
_list.h_ | List | Dynamic Array | A dynamic array with `push` and `pop` anywhere on the array |
+| Matrix
_WIP_ | Regular Matrix | Dynamic Array of Dynamic Arrays | A regular matrix with arbitrary rows and columns |
+| Queue
_queue.h_ | FIFO | Dynamic Circular Array | A queue using a circular array with `enqueue` at the `back` index and `dequeue` at the `front` index |
+| SortedList
_sortedlist.h_ | Sorted List | Sorted Dynamic Array | A lazily sorted dynamic array that is sorted only when necessary |
+| Stack
_stack.h_ | FILO | Dynamic Array | A stack with push and pop at the end of a dynamic array |
+| TreeBidiMap
_WIP_ | Sorted Bidirectional Map | Two AVL Trees | A sorted bijection between two sets of unique keys and unique values `K <-> V` using two AVL trees |
+| TreeMap
_treemap.h_ | Sorted Map | AVL Tree | A unique set of keys associated with a value `K -> V` using an AVL tree with `log(n)` look up and sorted iteration |
+| TreeMultiMap
_WIP_ | Sorted Multimap | AVL Tree | A sorted mapping of multiple keys with one node per key using an AVL Tree of linked-lists |
+| TreeMultiSet
_WIP_ | Sorted Multiset | AVL Tree | A sorted mapping of a value and its multiplicity using an AVL tree |
+| TreeSet
_treeset.h_ | Sorted Set | AVL Tree | A unique set of keys using an AVL tree with `log(n)` look up and sorted iteration |
## Features
@@ -126,16 +137,16 @@ The following table shows which functions are required, optional or never used f
| Collection | CMP | CPY | STR | FREE | HASH | PRI |
| ---------- | :-: | :-: | :-: | :--: | :--: | :-: |
-| BidiMap |  |  |  |  |  |  |
| Deque |  |  |  |  |  |  |
| HashMap |  |  |  |  |  |  |
+| HashBidiMap |  |  |  |  |  |  |
+| HashMultiMap |  |  |  |  |  |  |
+| HashMultiSet |  |  |  |  |  |  |
| HashSet |  |  |  |  |  |  |
| Heap |  |  |  |  |  |  |
| IntervalHeap |  |  |  |  |  |  |
| List |  |  |  |  |  |  |
| LinkedList |  |  |  |  |  |  |
-| MultiMap |  |  |  |  |  |  |
-| MultiSet |  |  |  |  |  |  |
| Queue |  |  |  |  |  |  |
| SortedList |  |  |  |  |  |  |
| Stack |  |  |  |  |  |  |