This section is entirely dedicated to explain in sufficient detail how abstract data types and data structures used by this API work in general.

Abstract Data Types are abstract data units defined by properties and operations without implementation suggestions. Following are used by API:

- List: defines blueprints for sequential data unit where every entry is accessible by position
- Associative Array: defines blueprints for sequential data unit where every entry is a key-value pair, values accessible by key
- Set: defines blueprints for sequential data unit where every entry is unique
- Container: defines blueprints for sequential data unit that behaves like a black box where only push/pop operations are used
- Tree: defines blueprints for data unit where every entry is a node, connected to one or more nodes
- Graph: defines blueprints for data unit where every entry is a vertex, connected to other vertexes via edges

Data Structures are concrete data units that provide implementation to one or more abstract data types. Following are used by API to implement abstract data types above:

- Dynamic Array: implements a List where all entries lie in a single memory block.
- Linked List: implements a List where each entry holds a link to to the next.
- Doubly Linked List: implements a List where each entry holds a link to to the next and previous.
- Stack: implements a Container where last entry pushed is first to be popped via a List.
- Queue: implements a Container where first entry pushed is first to be popped via a List.
- Hash Table: implements an Associative Array where each entry is distributed by a
*hash function*to a List of*buckets*, each bucket being also a List implementation. Can also be used to implement a Set by making key/value identical.

- Linked Hash Table: implements a version of Hash Table where each entry is also saved into a Doubly Linked List to allow predictable iteration.

- Standard Tree: implements a Tree whose nodes can have endless children.
- Binary Search Tree: implements a Tree optimized for searching where nodes can only have max two children.
- Red Black Tree: implements a version of Binary Search Tree where nodes are ordered by a
*compare function*and depth is balanced using*red-black algorithm*. Can be used to implement a Set or a Associative Array, where key-value pair will be node data.

- Red Black Tree: implements a version of Binary Search Tree where nodes are ordered by a
- Unweighted Graph: implements an abstract Graph where all edges have no weights
- Unweighted Directed Graph: implements a version of Unweighted Graph where edges are unidirectional by default
- Unweighted Undirected Graph: implements a version of Unweighted Graph where edges are always bidirectional

- Weighted Graph: implements an abstract Graph where all edges have weights
- Weighted Directed Graph: implements a version of Weighted Graph where edges are unidirectional by default
- Weighted Undirected Graph: implements a version of Weighted Graph where edges are always bidirectional