- Introduction (1h)
- Course overview
- What is DS and Algorithms
- Why companies ask DS
- Where it is using
- Types of DS

- Recursion (2h)
- What is recursion
- Why to learn recursion
- Format of recursion methods
- how recursion actually works
- Finding factorial using recursion (code & demo)
- Finding Fibonacci using recursion (code & demo)
- Recursion vs Iteration
- When to use & avoid recursion
- Practical uses of recursion

- Algorithm runtime analisys (1.5h)
- Overview
- What are notations
- Examples of notations
- Examples of time complexity
- Finding time complexity of iterative algorithm
- Finding time complexity of recursive algorithm1
- Finding time complexity of recursive algorithm2

- Arrays (2.5h)
- Overview
- Types of arrays
- How is array represented in memory
- Create an array
- Insert, travers in 1D array
- Access, search and delete in 1D array
- Code 1D array
- Time complexity of 1D array
- Create 2D array
- 2D array operations
- Time complexity of 2D arrays
- When to use 2D arrays
- Code 2D arrays
- Practical uses of 2D arrays

- Linked lists (5h)
- What is a linked list
- Linked list vs arrays
- Components of linked lists
- types of linked list
- Why so many types of linked list
- how to sort linked in in-memory
- Create a singly linked list (SLL)
- Insertion in SLL – (Dry run)
- Insertion in SLL Algorithm
- Traversal SLL
- Search a node in SLL
- Deletion of a node from SLL – (dry run)
- Deletion of node from SLL algorithm
- Delete entire SLL
- Time complexity of SLL
- Creation of circular singly linked list
- insertion of data in CSLL — Dry run
- insertion of data in CSLL — Algorithm
- Traverse CSLL
- Search a node in CSLL
- Delete a node in CSLL — Dry run
- Delete a node in CSLL — Algorithm
- Time complexity of CSLL
- Creating doubly linked list (DLL)
- Insert a node in DLL — Dry run
- Insert a node in DLL — Algorithm
- Traverse DLL
- Reverse traversal of DLL
- Search a node in DLL
- Delete a node from DLL — Dry run
- Delete a node from DLL — Algorithm
- Delete entire DLL
- Time complexity of DLL
- Create a doubly circular linked list (CDLL)
- Insert a node in CDLL — Dry run
- Insert a node in CDLL — Algorithm
- Traverse CDLL
- Reverse traverse CDLL
- search a node in CDLL
- Delete a node from CDLL — Dry run
- Delete a node from CDLL — Algorithm
- Delete entire CDLL
- Time complexity of CDLL
- SLL vs CSLL vs DLL vs CDLL
- Practical uses of linked lists

- Stacks (1.5h)
- Overview
- Create using arrays
- Create
- push, pop
- peek, isEmpty, isFull, delete

- create using LinkedList
- Create, push, pop
- peek, delete

- When to use or avoid stacks

- Queues (1.5h)
- Overview
- Linear Queue using arrays
- Create, enqueue
- dequeue, isEmpty, full, delete

- Circular queue using arrays
- Enqueue, dequeue
- peek, isEmpty, isFull, delete

- Linear queue using LL
- create, enqueue
- dequeue, isEmpty, isFull, delete

- Arrays vs LinkedList implementation

- Binary tree (2h)
- Overview
- Terminology
- Types of binary trees
- Create empty binary tree
- Pre-order traversal
- In-order traversal
- post-order traversal
- level-order traversal
- search for a value in binary tree
- insert a value in binary tree
- delete a value from binary tree
- delete binary tree

- Binary search tree (1h)
- Overview
- Creating and searching in BST
- Traversing a BST
- Inserting a node in BST
- Deleting a node from BST
- Deleting a BST

- AVL Tree (2h)
- Overview
- Create search traverse AVL tree
- Insert in AVL LL Theory
- Insert in AVL LL Algorithm
- Insert in AVL LR
- Insert in AVL RR
- Insert in AVL RL
- Insert end to end cases
- Delete LL LR RR RL
- Delete end to end cases
- Delete AVL tree and tree comparison

- Binary Heap (1h)
- Overview
- Create, peek, size of heap
- insert an element in a heap
- extract and delete from a heap

- Tries (1h)
- Overview
- create and insert in a trie
- search for a string in a trie
- delete a string from trie
- practical uses of a trie

- Graphs (2h)
- Overview
- Types of graphs
- Representation
- Sparse matrix
- Adjecancy list

- Traversal
- BFS
- DFS

- BFS vs DFS
- Conclusions of graph

- Conclusion
- Importance of Data Structures
- Interview directions.