This is a WIP and not finished in the slightest.
I've made this repository in order to learn new data structures and algorithms as well as practice the ones I did know, and what a better way is there than implementing them.
I've used various sources which are credited in each section, but I've mainly used GeeksForGeeks as a reference point and for the order of the algorithms.
Algorithms
Sorting
- Insertion Sort
- Selection Sort
- Merge Sort
- Bubble Sort
- Quick Sort
Searching
- Linear Search
- Binary Search
- Jump Search
- Exponential Search
- Ternary Search
- Fibonacci Search
- Sublist Search
Pattern Searching
- Naive Pattern Searching
- KMP
- Finite Automata
- Rabin Karp
- Aho Corasick
Primality Tests
- Miller Rabin
Mathematical
- GCD
- LCM
- Prime Factors
- Sieve Of Sundaram
- Smith Numbers
- Sphenic Numbers
Graph Algorithms
- BFS
- DFS
- Topological Sorting
- Kruskal's
- Prim's
- Dijkstra's Algorithm
- A*
Flow Algorithms
- Ford Fulkerson
Compression
- Huffman Coding
Backtracking
- The Knight's Tour
Data Structures
Linked Lists
- Singly Linked List
- Doubly Linked List
- Circular Linked List
Queue
Stack
Heaps
- A General Heap (Can be dynamically max or min)
- Max Heap
- Min Heap
Hash Maps (and various hash functions)
- Chaining Hash Map
- Open Addressing Hash Map
Trees
- Binary Tree
- Binary Search Tree
- AVL Tree
- Segment Tree
- Trie
Lists
- Skip List
- Self Organizing List
Graphs (various implementations of a graph)
- General Graph (graph stores node and edge objects)
- Adjacency List Graph (graph stores node objects and each node stores his neighbors)
- Adjacency Matrix Graph (graph stores node objects and a matrix that stores neighbors [rows = nodes, columns = nodes])
- Incidence Matrix Graph (graph stores node and edge objects, and a matrix that stores which node is affiliated to which edge [rows = nodes, columns = edges])