## struct

General purpose data structures and algorithms.

## Data Structures

- [x] Dictionary
- [x] Array Bag
- [x] List Bag
- [x] Array Stack
- [x] List Stack
- [x] Array Queue
- [x] List Queue
- [ ] Priority Queue
- [x] Array Unordered Priority Queue
- [ ] Array Ordered Priority Queue
- [x] Binary Heap Priority Queue
- [ ] N-ary Heap Priority Queue
- [ ] Fibonacci Heap Priority Queue
- [ ] Search Tree
- [ ] List Unordered Symbol Table
- [ ] Array Ordered Symbol Table
- [x] Binary Search Tree
- [ ] 2-3 Search Tree - [x] Left Leaning Red-Black Binary Search Tree
- [ ] B Tree
- [ ] B+ Tree
- [ ] Hash Table
- [ ] List Unordered Hash Table
- [ ] Array Ordered Hash Table
- [ ] Binary Search Tree Hash Table
- [ ] Red-Black Binary Search Tree Hash Table
- [x] Separate Chaining Hash Table
- [x] Linear Probing Hash Table
- [ ] Graph
- [ ] Directed Matrix Graph
- [ ] Undirected Matrix Graph
- [x] Directed Adjacency Graph
- [x] Undirected Adjacency Graph
- [ ] Directed Edged Graph
- [ ] Undirected Edged Graph
- [ ] Flow Capacity Graph

## Algorithms

- [ ] Sort
- [x] Array Comparator Network Sort
- [x] Array Bubble Sort
- [x] Array Selection Sort
- [x] Array Insertion Sort
- [x] Array Shell Sort
- [X] Array Merge Sort - [x] Array Bottom Up Merge Sort
- [x] Array Quick Sort - [x] Array Three Way Quick Sort
- [ ] Binary Heap Sort
- [x] Shuffle
- [x] Sort Shuffle
- [x] Knuth Shuffle
- [ ] Select
- [x] Array Quick Select
- [ ] Array Binary Search
- [ ] Graph Operations
- [x] Depth First Search
- [x] Breadth First Search
- [x] Connected Components
- [ ] Strongly Connected Components
- [ ] Bipartite Components
- [ ] Cyclic Components
- [ ] Euler Tour - Visit each edge once
- [x] Topological Sort
- [ ] Graph Minimum Spanning Tree
- [ ] Lazy Prim's Minimum Spanning Tree
- [ ] Eager Prim's Minimum Spanning Tree
- [ ] Kruskal's Minimum Spanning Tree
- [ ] Euclidean Minimum Spanning Tree
- [ ] Graph Shortest Path
- [ ] Dijkstra's Shortest Path - Non-negative weights
- [ ] Bellman-Ford Shortest Path - No negative cycles
- [ ] Topological Sort Shortest Path - No directed cycles
- [ ] Graph Flow
- [ ] Ford-Fulkerson Maximum Flow

## Tests

Run the unit tests using Massive Unit.

`haxelib run munit test`

If you wish to run tests against just one target, say Javascript, simply add the target name to the end, like so:

`haxelib run munit test -js`

You can find the full list of available platforms
in `test.hxml`

, which is the configuration file
used by the Haxe compiler when running Massive Unit.

If you wish to run tests against the C++ target, you will need to install HXCPP first.

```
haxelib install hxcpp
haxelib run munit test -cpp
```

## Cross Platform

This library is written in Haxe, which transpiles or compiles to many target languages and platforms. Therefore, this library is cross platform, and can be built and compiled/linked/required/imported into many varied projects.

As the author of this project, I cannot take credit for that,
and instead it goes to the **amazing technology** under the hood of Haxe.
If you think that is cool why not give Haxe a go?

## Author

## Licence

GPL-3.0