# Data Structures and Algorithms I should know

I have been programming for about 3 years. And just I have realized I know nothing about it. You may be surprised! But believe me, I have learnt a little about data structures and algorithms. To say the very truth, they are the heart of programming. So I should learn them as many as I can.

The time doesn’t wait. But fortunately, I have time to learn till now. You may start with me too. I am making a list of data structures and algorithms so that anyone can easily know what to learn. But I have a disclaimer. Please use this list with your common sense. I am not showing any learning source here. Because, I will implement in Python3, you may use C/C++/Java. So please search on Google/Bing to get the resources. Also I may make some mistakes to categorize these things. Adjust kindly!

# Data Structures

## Basic Data Structures

- Stack (Array & Linked List Implementation)
- Queue (Array & Linked List Implementation)
- Linked List (Single, Double & Circular)
- Lists

## Tree Data Structures

- Binary Search Tree
- Heaps
- Height Balanced Tree
- K-ary Tree
- AVL Tree
- B Tree
- B+ Tree
- Indexing with Trees
- Segment Tree
- Fenwick Tree
- Binary Indexed Tree (BIT)
- Red-Black Tree
- Splay Tree
- Binomial Queues
- Fibonacci Heaps
- Leftist Heaps
- Skew Heaps
- Open Hash Tables (Closed Addressing)
- Closed Hash Tables (Open Addressing)
- Closed Hash Tables, using buckets

## Uncategorized

- Trie
- Disjoint-set Data Structures
- Suffix Arrays

# Algorithms

## Sorting Algorithms

- Bubble Sort
- Insertion Sort
- Selection Sort
- Shell Sort
- Merge Sort
- Quick Sort
- Heap Sort
- Radix Sort
- Bucket Sort
- Counting Sort

## Graph/Search Algorithms

- Depth First Search (DFS)
- Breadth First Search (BFS)
- Iterative Deepening Depth First Search (Depth Limited Search)
- A* Search
- Ternary Search
- Meet in the middle
- Strongly Connected Components (SCC)
- Bipartite Matching
- Kruskal Minimum Cost Spanning Tree Algorithm
- Prim’s Minumum Cost Spanning Tree
- Dijkstra’s Algorithm for Shortest Paths
- Floyd-Warshall Algorithm for Shortest Paths
- Bellman-Ford Algorithm
- Edmonds-Karp Algorithm
- Hungarian Algorithm
- Sweep Line Algorithm
- Graham scan
- Tarjan’s Algorithm
- Knuth-Morris-Pratt Algorithm
- Z algorithm
- Hill Climbing

## Dynamic Programming

- Integer Knapsack problem
- Matrix Chain Multiplication
- Longest Common Subsequence
- Rod Cutting

## Greedy Algorithms

- Elementary cases : Fractional Knapsack Problem, Task Scheduling
- Data Compression using Huffman Trees
- Activity Selection

## Number Theory

- Modular Arithmetic
- Fermat’s Theorem
- Chinese Remainder Theorem(CRT)
- Euclidian Method for GCD
- Logarithmic Exponentiation
- Sieve of Eratosthenes
- Euler’s Totient Function

## Geometric Algorithms

- 2D Rotation and Scale Matrices
- 2D Rotation and Translation Matrices
- 2D Changing Coordinate Systems
- 3D Rotation and Scale Matrices
- 3D Changing Coordinate Systems

## Uncategorized

- Recursion
- Huffman Coding
- Regex Algorithm (Pattern Matching and Parsing)
- Hashing- Hash Functions
- Monotone Chains Algorithm
- Coordinate Compression
- Ford–Fulkerson Method
- Preflow-Push Algorithm
- Dinic’s Algorithm
- Monte Carlo method or Metropolis Algorithm
- Krylov Subspace Iteration Method
- Householder Matrix Decomposition
- QR Algorithm
- Fast Fourier Transform
- Integer Relation Detection Algorithm
- Fast Multipole algorithm
- MinMax Algorithm
- Divide and Conquer Algorithm

Not enough smart list? Please suggest me from your point of view how I can make this list smarter. Till then, have a cup of programming!