This course aims to:
Upon completion of this course, students will be able to:
Basic Terminology, Elementary Data Organization, Built-in Data Types, Abstract Data Types, Algorithms, Complexity of Algorithms, Asymptotic Notations, Time-Space tradeoff.
Arrays: Representation of Arrays, Single and Multidimensional Arrays, Address Calculation, Application of arrays, Sparse Matrices and their representations.
Structures: Declaration, initialization, accessing structures, operations on structures, nested structures, arrays of structures, structures and functions, unions.
Stacks: Array Representation and Implementation of Stacks, Operations on Stacks, Applications of Stacks: Expression Conversion and evaluation, Recursion, Linked representation of Stack
Queues: Array and linked representation and implementation of queues, various queue structures (circular queue, dequeue, priority queue), Operations on Queues, Applications of Queues.
Linked Lists: Representation of linked lists in memory, Operations on Linked Lists (Insertion, Deletion, Search), Types of Linked Lists (Singly Linked List, Doubly Linked List, Circular Linked List), Applications of linked lists.
Basic terminology, Binary trees, Binary tree representation, Binary Search Trees, Tree traversal algorithms, Threaded binary trees, AVL Trees, Applications of trees.
Sorting: Selection Sort, Bubble Sort, Insertion Sort, Quick Sort, Merge Sort, Heap Sort, Radix Sort.
Searching: Linear Search, Binary Search.
Basic terminology, Graph representations (adjacency matrix, adjacency list), Graph Traversals (BFS, DFS), Applications of Graphs, Minimum Spanning Trees (Kruskal's and Prim's algorithms), Shortest Path Algorithms (Dijkstra's algorithm).
Hash tables, Hash functions, Collision resolution techniques (chaining, open addressing), Applications of hashing.
Upon completion of this lab, students will be able to: