
Learn data structures and algorithms in Python through theory and hands-on implementation. Explore recursion, stacks, queues, linked lists, trees, graphs, and sorting to prepare for interviews.
Adjust playback speed with the speed control to match your pace, and use the Q&A and notes features to engage with the data structures and algorithms course.
Discover why data structures matter: they store data efficiently in memory and enable fast algorithmic access, using linear forms (stacks, queues) and non-linear forms (trees, graphs).
Learn to print output, use strings and numbers, declare variables, follow Python naming rules, and explore basic data types including numbers, sequences, sets, mapping, and none.
Learn about Python numbers: integers, floats, complex, and booleans. Integers are unbounded by memory; floats use decimals and exponents; complex numbers reveal real and imaginary parts via .real and .imag.
Understand Python's boolean data type, where true and false arise from comparisons and booleans are a subclass of integers, and recognize the none type as a single object representing null.
Explore Python conditional control statements—if, if-else, and elif—discover how conditions evaluate to true or false, how indentation defines blocks, and how to handle multiway branches.
Learn how Python for loop can include an optional else clause that runs only after normal termination, unless a break occurs, with a vowel check example.
Create tuples with parentheses and access elements using index and negative index. Inspect type and length, and concatenate tuples with the plus operator, while noting immutability prevents modification or deletion.
Learn to define and call user defined functions in Python using def, parameters, and return values, with examples of display, addition, and multiplication.
Time and Space Complexity
Explore the order of growth by classifying algorithms as input size grows, from constant and logarithmic to linear, quadratic, cubic, and exponential, including divide-and-conquer and asymptotic analysis.
Understand the big omega notation and its lower bound concept, showing that f(n) equals five n plus four is omega of n as n grows, with a positive constant factor.
Explore asymptotic notations and their meanings, including big o, big omega, and theta, and emphasize worst-case performance for algorithms. Illustrate linear search complexities and order-of-growth classifications from constant to exponential.
Explore space complexity by analyzing memory usage and bytes across data types, arrays, and two-dimensional arrays, with examples calculating total memory in algorithms.
Explore indirect recursion, where multiple functions call each other in a circular pattern with a base condition. Analyze how the call sequence and base conditions determine the time complexity.
Explore the factorial concept by defining fact(n) as 1 to n, derive the recurrence fact(n)=fact(n-1)*n with base case fact(0)=1, and compare the recursive and iterative approaches with linear time.
Learn the iterative binary search on a sorted array. Compare the key to the middle element, narrow to the left or right half, and return the index or not found.
Implement bubble sort in Python by defining a bubblesort function, using a list, nested loops, and swaps, then print the original and sorted arrays while noting its time complexity.
Learn to implement shell sort in Python by writing a shellsort function, using gap-based insertion with while loops, shifting elements, and verifying with a sample array.
Implement quicksort in Python by defining quicksort and partition functions, using low and high indices and a pivot. Demonstrate with a sample array, showing original and sorted results.
Learn to insert an element at the beginning of a linked list using the at first method, creating a newest node and updating head. It runs in O(1) time.
Remove the first element of a linked list by updating head to head.next, adjusting tail when needed, and returning the deleted value in unit time.
Learn to implement a circular linked list in Python by building a class with head, tail, and size; add nodes at the end and display the list.
Implement the add_first method in Python to insert an element at the beginning of a doubly linked list. It handles empty and non-empty cases and updates head, tail, and size.
Learn to implement queues with Python arrays, supporting enqueue, dequeue, is empty, and front operations via a custom queue class backed by a list.
Create a binary tree in Python using linked nodes with element, left, and right, using slots and an init method, and build trees with a make_tree function.
Create and traverse binary trees using a six-node example, building leaf and internal nodes, assigning left and right subtrees, and performing inorder, preorder, and postorder traversals in Python.
Learn to count nodes in a binary tree using a recursive function that sums the left and right subtree counts and adds one for the root.
This course will help you in better understanding of the basics of Data Structures and how algorithms are implemented in Python. This course consists of Videos which covers the theory concepts + implementation in python.
There’s tons of concepts and content in this course:
Basics of data structures & Algorithms
Analysis of Algorithms (Big O, Time and Space complexity)
Recursion & Analysis of Recursive Algorithms
Searching Algorithms
Sorting Algorithms
Linked List
Stacks
Queues
Binary Trees
Binary Search Trees
Balanced Binary Search Trees
Priority Queues and Heaps
Hashing
Graphs
Graph Traversal Algorithms
Followed by Advanced Topics of Algorithms:
Sets and Disjoint Sets
Divide and Conquer Approach - Introduction
Divide and Conquer - Binary Search
Divide and Conquer - Finding Maximum and Mininum
Divide and Conquer - Merge Sort
Divide and Conquer - Quick Sort
Divide and Conquer - Selection Algorithm
Divide and Conquer - Strassens Matrix Multiplication
Divide and Conquer - Closest Pair
Divide and Conquer - Convex Hull
Greedy Method - Introduction
Greedy Method - Knapsack Problem
Greedy Method - Job Sequencing with Deadlines
Greedy Method - Mininum Cost Spanning Tree (Prim's & Kruskal's Algorithms)
Greedy Method - Optimal Storage on Trees
Greedy Method - Optimal Merge Pattern
Greedy Method - Single Source Shortest Path (Dijkstra's Algorithm)
Dynamic Programming - Introduction
Dynamic Programming - Multistage Graphs
Dynamic Programming - All Pairs Shortest Path
Dynamic Programming - Single Source Shortest Path
Dynamic Programming - Optimal Binary Search Trees
Dynamic Programming - 0/1 Knapsack Problem
Dynamic Programming - Reliability Design
Dynamic Programming - Travelling Salespersons Problem
Backtracking - Introduction
Backtracking - n-Queesn Problem
Backtracking - Sum of Subsets Problem
Backtracking - Graph Coloring Problem
Backtracking - Hamiltonian Cycles Problem
Backtracking - 0/1 Knapsack Problem
Branch & Bound - Introduction
Branch & Bound - n-Queens Problem
Branch & Bound - Job Sequencing Problem
Branch & Bound - 0/1 Knapsack Problem
Again, each of these sections includes detailed videos tutorial.