Friends, this article lists some the of best courses available online on Data Structures and Algorithms. We recommend to go through them to have strong basics.

## Data Structures and Algorithms by Dr. Naveen Garg

Lecture Series on Data Structures and Algorithms by **Dr. Naveen Garg**, Department of Computer Science and Engineering, IIT Delhi.

**Playlist details –**

- Lecture – 1 Introduction to Data Structures and Algorithms
- Lecture – 2 Stacks
- Lecture – 3 Queues and Linked Lists
- Lecture – 4 Dictionaries
- Lecture – 5 Hashing
- Lecture – 6 Trees
- Lecture – 7 Tree Walks / Traversals
- Lecture – 8 Ordered Dictionaries
- Lecture – 9 Deletion
- Lecture – 10 Quick Sort
- Lecture – 11 AVL Trees
- Lecture – 12 AVL Trees
- Lecture – 13 Trees
- Lecture – 14 Red Black Trees
- Lecture – 15 Insertion in Red Black Trees
- Lecture – 16 Disk Based Data Structures
- Lecture – 17 Case Study: Searching for Patterns
- Lecture – 18 Tries
- Lecture – 19 Data Compression
- Lecture – 20 Priority Queues
- Lecture – 21 Binary Heaps
- Lecture – 22 Why Sorting
- Lecture – 23 More Sorting
- Lecture – 24 Graphs
- Lecture – 25 Data Structures for Graphs
- Lecture – 26 Two Applications of Breadth First Search
- Lecture – 27 Depth First Search
- Lecture – 28 Applications of DFS
- Lecture – 29 DFS in Directed Graphs
- Lecture – 30 Applications of DFS in Directed Graphs
- Lecture – 31 Minimum Spanning Trees
- Lecture – 32 The Union
- Lecture – 33 Prims Algorithm for Minimum Spanning Trees
- Lecture – 34 Single Source Shortest Paths
- Lecture – 35 Correctness of Dijkstras Algorithm
- Lecture – 36 Single Source Shortest Paths

Click here to download slides to his lectures number 1-18.

Click here to download all PDFs to his lecture documentation.

## MyCodeSchool

#### 1. Pointers in C/C++

Pointers is one concept that does not go well with beginners. This series of videos will try to demystify pointers.

**Playlist details –**

- Introduction to pointers in C/C++
- Working with pointers
- Pointer types, pointer arithmetic, void pointers
- Pointers to Pointers in C/C++
- Pointers as function arguments – call by reference
- Pointers and arrays
- Arrays as function arguments
- Character arrays and pointers – part 1
- Character arrays and pointers – part 2
- Pointers and 2-D arrays
- Pointers and multidimensional arrays
- Pointers and dynamic memory – stack vs heap
- Dynamic memory allocation in C – malloc calloc realloc free
- Pointers as function returns in C/C++
- Function Pointers in C / C++
- Function pointers and callbacks
- Memory leak in C/C++

#### 2. Data structures

This series of lessons covers Data Structures. Data structures are implemented in C or C++. Pre-requisite for this lesson is good understanding of pointers in C. Watch above series on pointers before starting on this series.

**Playlist details –**

- Introduction to data structures
- Data Structures: List as abstract data type
- Introduction to linked list
- Data Structures: Arrays vs Linked Lists
- Linked List – Implementation in C/C++
- Linked List in C/C++ – Inserting a node at beginning
- Linked List in C/C++ – Insert a node at nth position
- Linked List in C/C++ – Delete a node at nth position
- Reverse a linked list – Iterative method
- Print elements of a linked list in forward and reverse order using recursion
- Reverse a linked list using recursion
- Data structures: Introduction to Doubly Linked List
- Doubly Linked List – Implementation in C/C++
- Data structures: Introduction to stack
- Data structures: Array implementation of stacks
- Data Structures: Linked List implementation of stacks
- Reverse a string or linked list using stack.
- Check for balanced parentheses using stack
- Infix, Prefix and Postfix
- Evaluation of Prefix and Postfix expressions using stack
- Infix to Postfix using stack
- Data structures: Introduction to Queues
- Data structures: Array implementation of Queue
- Data structures: Linked List implementation of Queue
- Data structures: Introduction to Trees
- Data structures: Binary Tree
- Data structures: Binary Search Tree
- Binary search tree – Implementation in C/C++
- BST implementation – memory allocation in stack and heap
- Find min and max element in a binary search tree
- Find height of a binary tree
- Binary tree traversal – breadth-first and depth-first strategies
- Binary tree: Level Order Traversal
- Binary tree traversal: Preorder, Inorder, Postorder
- Check if a binary tree is binary search tree or not
- Delete a node from Binary Search Tree
- Inorder Successor in a binary search tree
- Data structures: Introduction to graphs
- Data structures: Properties of Graphs
- Graph Representation part 01 – Edge List
- Graph Representation part 02 – Adjacency Matrix

#### 3. Sorting Algorithms

This series of lessons covers and analyze various sorting algorithms.

**Playlist details –**

- Introduction to sorting algorithms
- Selection sort algorithm
- Bubble sort algorithm
- Insertion sort algorithm
- Merge sort algorithm
- Analysis of Merge sort algorithm
- Quicksort algorithm
- Analysis of quicksort

#### 4. Binary Search

In this series of lessons, we will learn binary search and solve problems using binary search.

**Playlist Details –**

- What is binary search
- Binary Search – Iterative Implementation and common errors
- Binary Search – Recursive implementation
- Binary search – finding first or last occurrence of a number
- Count occurrences of a number in a sorted array with duplicates using Binary Search
- How many times is a sorted array rotated?
- Search element in a circular sorted array

## MIT 6.046J / 18.410J Introduction to Algorithms (SMA 5503)

This course strictly follows CLRS book and one of the instructor is **Prof. Charles Leiserson**, co-author of C**L**RS book himself. This course teaches techniques for the design and analysis of efficient algorithms, emphasizing methods useful in practice. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; caching; and parallel computing.

**Playlist Details –**

- Lecture 1: Administrivia; Introduction; Analysis of Algorithms, Insertion Sort, Mergesort
- Lecture 2: Asymptotic Notation; Recurrences; Substitution, Master Method
- Lecture 3: Divide-and-Conquer: Strassen, Fibonacci, Polynomial Multiplication
- Lecture 4: Quicksort, Randomized Algorithms
- Lecture 5: Linear-time Sorting: Lower Bounds, Counting Sort, Radix Sort
- Lecture 6: Order Statistics, Median
- Lecture 7: Hashing, Hash Functions
- Lecture 8: Universal Hashing, Perfect Hashing
- Lecture 9: Relation of BSTs to Quicksort – Analysis of Random BST
- Lecture 10: Red-black Trees, Rotations, Insertions, Deletions
- Lecture 11: Augmenting Data Structures, Dynamic Order Statistics, Interval Trees
- Lecture 12: Skip Lists
- Lecture 13: Amortized Algorithms, Table Doubling, Potential Method
- Lecture 14: Competitive Analysis: Self-organizing Lists
- Lecture 15: Dynamic Programming, Longest Common Subsequence
- Lecture 16: Greedy Algorithms, Minimum Spanning Trees
- Lecture 17: Shortest Paths I: Properties, Dijkstra’s Algorithm, Breadth-first Search
- Lecture 18: Shortest Paths II: Bellman-Ford, Linear Programming, DifferenceConstraints
- Lecture 19: Shortest Paths III: All-pairs Shortest Paths, Matrix Multiplication, FloydWarshall, Johnson
- Audio/video for lectures 20 and 21 are not available
- Lecture 22: Advanced Topics
- Lecture 23: Advanced Topics (cont.)
- Lecture 24: Advanced Topics (cont.)
- Lecture 25: Advanced Topics (cont.) – Discussion of Follow-on Classes

The Course problems sets are available here. Below are the links to download slides/transcripts of above lectures –

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 22 23 24 25

All the very best 🙂