```
o---o | |
/ --O---O--
O | |
\ --O---O--
o---o | |
O o o--o o--o o---o o-O-o o--O--o o o o o o--o
/ \ | o o o | | | | | | |\ /| |
o---o | | o-o | | O--Oo | | O---O | \o/ | o--o
| | | o | o o | \ | | | | | | |
o o O---o o--o o--o o \o o-O-o o o o o o o---o
```

A plug-and-play class-library project of standard Data Structures and Algorithms, written in C#. It contains **75+** Data Structures and Algorithms, designed as Object-Oriented isolated components. Even though this project started for educational purposes, the implemented Data Structures and Algorithms are standard, efficient, stable and tested.

This project originally started out as an interview preparation project. However, after receiving a great amount of positive responses on reddit, and noticing excitement from a few GitHubers to contribute furthermore to it, the project took on a different meaning. So, I decided to keep maintaining it as a reference for data structures and algorithm implementations in C# as well as my own research side-project under these topics.

This is a C#.NET solution-project, and it contains three subprojects:

- Algorithms: A class library project. Contains the Algorithms implementations
- Data Structures: A class library project. Contains the Data Structures implementations
- UnitTest: Unit-testing project for the Algorithms and Data Structures

- .NET Core >= 2.0
- XUnit

If you wish to contribute to C# ALGORITHMS, then please make sure you check out the Contribution Guidelines first.

- Basic Search Trees:
- Binary Search Tree
- Map version
*(supports key-value pairing; nodes indexed by keys)*

- Map version
- (Augmented) Binary Search Tree
- Ternary Search Tree

- Binary Search Tree
- Self-Balancing Trees:
- AVL Tree
- B-Tree
- Red-Black Tree
- Map version
*(supports key-value pairing; nodes indexed by keys)*

- Map version

- Prefix Trees:

- Undirected Graphs:
- Undirected Weighted Graphs:
- Directed Graphs:
- Directed Weighted Graphs:

- Bubble Sort
- Bucket Sort
- BST Sort
- Comb Sort
- Counting Sort
- Cycle Sort
- Gnome Sort
- Heap Sort
- Insertion Sort
- LSD Radix Sort
- Merge Sort
- Selection Sort
- Shell Sort
- OddEven Sort
- PigeonHole Sort
- Quick Sort

- Graph Search:
- Shortest Paths:
- DFS Applications:
- BFS Applications:

- Recursive Binary Tree Walker
- Methods: PrintAll, ForEach, Contains and BinarySearch. Traversal Modes: Preorder, Inorder & Postorder

- Permutations and Anagrams
- Edit Distance
- Uses a generic custom class for passing costs: EditDistanceCostsMap<T>

This project is licensed under the MIT License.