Introduction, Array data type, List Abstract Data Type (ADT) | 1 | Handouts | 3-11 |
List ADT operations, implementation of List ADT with arrays and linked list | 2 | Handouts | 12-19 |
C++ code for linked lists | 3 | Handouts | 20-31 |
C++ code for linked list, doubly linked list, circularly linked list, Josephus problem | 4 | Handouts | 32-45 |
Stacks, stack operations, implementation with arrays | 5 | Handouts | 46-55 |
Stack implementation with linked list, prefix, infix and postfix expressions, infix to postfix conversion. | 6 | Handouts | 56-62 |
Uses of stacks: evaluating postfix expression, converting infix to postfix form | 7 | Handouts | 63-70 |
C++ templates, using templates in Stack class | 8 | Handouts | 71-81 |
Runtime memory organization, runtime stack layout, Queue ADT, implementing queue ADT using linked list and circular arrays. | 9 | Handouts | 82-92 |
Uses of queue: simulation, event based simulation of a bank, priority queues | 10 | Handouts | 93-104 |
Priority queue implementation using arrays, Binary trees | 11 | Handouts | 105-122 |
Complete Binary tree, application of Binary trees: search for duplicates, Binary Search Tree (BST), implementation using C++. | 12 | Handouts | 123-134 |
Cost of search in BST, binary tree traversal: pre-order, in-order, post-order | 13 | Handouts | 135-145 |
Recursive pre-order, in-order, post-order traversal, non-recursive traversal using explicit stack, level-order traversal | 14 | Handouts | 146-157 |
Level-order traversal using a queue, deleting node in BST | 15 | Handouts | 158-169 |
C++ code for delete node in BST. The BST class | 16 | Handouts | 170-188 |
C++ Reference variables | 17 | Handouts | 189-202 |
C++ Reference variables, the C++ const keyword | 18 | Handouts | 202-210 |
Degenerate BST, height balanced BST - AVL trees. | 19 | Handouts | 211-219 |
Inserting in a AVL tree. | 20 | Handouts | 220-230 |
Inserting in a balanced BST, tree rotation for height balancing | 21 | Handouts | 231-239 |
Various rotation cases, C++ code for insert with rotations | 22 | Handouts | 240-256 |
C++ code for insert with single and double rotations | 23 | Handouts | 257-272 |
Deleting node in an AVL tree, other uses of trees: expression trees | 24 | Handouts | 273-283 |
Constructing expression trees using stacks, Huffman encoding for data compression | 25 | Handouts | 284-295 |
Building Huffman code tree, generating Huffman code | 26 | Handouts | 296-306 |
Threaded binary trees. | 27 | Handouts | 307-320 |
In-order traversal of threaded binary tree, complete binary tree stored in an array | 28 | Handouts | 321-332 |
The Heap ADT, implementation of heap ADT using complete binary tree, inserting into a heap. | 29 | Handouts | 333-347 |
Delete (min) in a heap. Build heap from a set of data items. | 30 | Handouts | 348-359 |
Build heap operation. Heap ADT as a C++ class | 31 | Handouts | 360-369 |
Proof of Build heap being a linear time operation. | 32 | Handouts | 370-378 |
Priority queue implementation using heap ADT, selection problem, heap sort. Equivalence relations | 33 | Handouts | 379-385 |
Equivalence relations, Disjoint Sets | 34 | Handouts | 386-392 |
Disjoint sets implementation using inverted trees, the Union and Find operations on Disjoint Sets. | 35 | Handouts | 393-403 |
Optimizing Union and Find operation, Union by size, path compression | 36 | Handouts | 404-415 |
Uses of Disjoint Sets: Image segmentation, maze generation | 37 | Handouts | 416-423 |
The Table ADT, implementation using arrays | 38 | Handouts | 424-429 |
Table ADT implementations using sorted arrays, binary search algorithm on sorted arrays, skip lists | 39 | Handouts | 430-440 |
Skip lists insertion and deletion | 40 | Handouts | 441-448 |
Table ADT implementation using Hashing | 41 | Handouts | 449-458 |
Collision resolution in Hashing | 42 | Handouts | 459-467 |
Other uses of Hashing, sorting | 43 | Handouts | 468-473 |
Selection sort, insertion sort, bubble sort algorithms | 44 | Handouts | 474-484 |
Divide and conquer strategy: merge sort, quick sort. | 45 | Handouts | 485-504 |