
Explore how data structures organize, process, retrieve, and store data, and learn how primitive and non-primitive structures, arrays, linked lists, stacks, queues, trees, graphs, enable efficient algorithms.
Explore asymptotic notations—big O, big Omega, and big Theta—and learn to determine upper, lower, and tight bounds for algorithm running time using examples.
Analyze space complexity and time complexity, separating fixed and variable parts, and evaluate recursion stack and depth of recursion through swap, arrays, and matrix operations.
Explore how to determine time complexity using posteriori and priori analyses, including asymptotic notation, and apply experimental, counter, and tabular methods to analyze loop-based algorithms.
Compare array and linked list by access cost and memory, noting arrays provide direct O(1) access while linked lists need O(n) traversal from the head with data and link overhead.
Create a linked list node with data and a next pointer, define a self-referential struct, and allocate memory dynamically using malloc with proper typecasting to struct node.
Create and link nodes in a singly linked list by dynamically allocating memory, initializing data, and setting next pointers. Update the head and links to form a multi-node list.
Learn insertion at the beginning in a singly linked list by setting the new node's next to the head, then updating the head. See related insertions at other positions.
Insert a node at the end of a singly linked list by traversing from the head. Use a temporary pointer to reach the last node and link the new node.
Learn how to insert a node at any position in a linked list, using a traversal pointer, counting the list length, and updating pointers to insert between nodes.
Explore the stack, a linear data structure with last-in, first-out behavior, its push, pop, and peek operations, and its use in string reversal, undo, and infix-postfix conversions.
Implement stacks with arrays and linked lists, including static and dynamic memory. Master push, pop, peek, display, overflow, underflow, and time complexities.
Explore tree terminologies, including root, edges, parent and child, degree, leaves, siblings, height, depth, subtree and path, plus array or linked list representations in binary and complete binary trees.
Explore AVL trees, a self-balancing binary search tree, balancing height with rotations to keep operations like search, insert, and delete at O(log n).
Learn how hashing maps data into a hash table via a hash function, enabling insertion, deletion, and search. Explore static vs dynamic hashing and methods like mid square.
Explore how collisions arise when multiple keys share a hash value and learn separate chaining, an open hashing approach using a linked list in the hash table to resolve them.
Demystify open addressing collision resolution with linear probing. Apply hash(key) mod m and probe i steps (0-9) to place keys like 89, 18, 49, and 58.
Explore collision resolution with quadratic probing. See how keys 89, 18, 49, 58, and 69 are placed using hash(key) mod table size and i squared to resolve collisions.
Explain how double hashing resolves collisions in addressing using two hash functions u and v, via the probe sequence (u + i v) mod m, with r as a prime.
Explore topological sorting to obtain a linear ordering of DAG vertices where predecessors precede successors, and learn how indegrees guide multiple orderings for applications like job scheduling and instruction scheduling.
Explore breadth first search, a queue-based graph traversal that yields a spanning tree by visiting non-visited adjacent vertices from a starting node and enqueuing them until the queue empties.
Explore depth first search as a graph traversal method, using a stack to visit non-visited adjacent vertices, backtrack by popping, and obtain a spanning tree with no cycles.
Explore graphs as non-linear data structures with vertices and edges, differentiate undirected and directed graphs, and learn representations via adjacency matrix and adjacency list, including in-degree and out-degree.
Learn Prim's algorithm for constructing a minimum spanning tree by starting at a vertex, expanding through smallest edges, avoiding cycles, and computing the minimum spanning tree cost.
Explore Kruskal's algorithm for finding a minimum spanning tree by sorting edges by weight, selecting non-cycle edges, and building a spanning tree in a greedy, edge-by-edge process.
Explore Dijkstra's shortest path algorithm for finding the minimum distance between vertices on graphs with non-negative edges, using a source-based update of tentative distances in directed and undirected graphs.
This course offers a deep dive into the world of data structures, a foundational aspect of computer science and programming. It is designed for beginners looking to strengthen their understanding of how data can be organized, stored, and accessed efficiently. The course covers the basics about data, the need for a data structures, its types and a variety of fundamental data structures such as arrays, linked lists, stacks, queues, trees, hash tables, and graphs.
Participants will explore the properties and applications of each data structure, learning how to implement them in real-world scenarios. Emphasis is placed on understanding when and why to use particular structures to optimize algorithm performance. The course includes hands-on coding exercises and problem-solving sessions to reinforce theoretical concepts with practical experience. The course also explains how a particular data structure is used in solving a problem.
By the end of the course, learners will be equipped with the knowledge to select the right data structure for any given problem, improve the efficiency of their code, and develop more sophisticated algorithms. This course is ideal for aspiring programmers, computer science students, or anyone who wants to build a solid foundation in data structures to advance their programming skills.