COSC 2336 Topic Outline Data Structures & Algorithm Analysis I. Linear Structures A. Stack B. Queue C. SLL - Single Linked List D. DLL - Double Linked List II. Implementation Schemes for Data Structures A. Language Primitive (Show variations among languages.) 1. Integer 2. Real 3. String (Static, Dynamic, and Hybrid) 4. Set 5. Record, Struct, Heterogeneous Aggregate 6. Array, Homogeneous Aggregate 7. Others, (Stack, List, Logical, Complex, etc.) B. Programmer Defined 1. Static with Implicit Pointers (Typically using an array.) 2. Dynamic with Explicit Pointers (Typically using dynamic variables.) 3. Static with Explicit Pointers (Typically using an array of structs.) III. Non-Linear Structures A. MLL - Multi-Linked List B. Binary Tree 1. PreOrder, PostOrder, InOrder, and other Traversals 2. Binary Search Tree (BST) 3. Expression Tree 4. Heap C. M-ary Tree D. M-ary Tree implemented as a binary tree E. Height Balanced Binary Search Tree (AVL Tree) F. B tree, B+ Tree G. Graphs 1. Directed 2. Undirected 3. Implementations a. Connectivity Matrix b. Weighted Connectivity Matrix c. N union E as an MLL d. Array-Array and Array-List combinations e. Effective storage for sparse matrices IV. Internal Sorting A. Bubble, Selection, Insertion, etc. B. BST Sort C. Heap Sort D. Quick Sort with variations E. Bin or Radix Sort F. Address Calculation Sorting Techniques G. Merge Sort H. Shell Sort (if time permits) V. External Sorting A. Merging Sorted Files B. External Merge Sort VI. Introduction to Algorithm Analysis (Primarily computation time, but also other resources such as memory in some cases. ) A. Worst Case Analysis - Upper Bound (Big Oh) B. Best Case Analysis - Lower Bound (Big Omega) C. Average Case Analysis - Expected Value (Called Big A) VII. Introduction to File Structures A. Sequential Files B. Indexed Files C. Indexed Sequential Files D. Inverted Files VIII. Searching A. Linear Search B. Binary Search C. Binary Search Tree D. Hashing and Symbol Tables 1. Open or Bucket Hashing 2. Closed Hashing (Linear Quotient) IX. Algorithmic Styles and Techniques A. Recursion (Direct and Mutual) B. Divide and Conquer C. Greedy Method D. Exhaustive Search E. Backtracking F. Dynamic Programming G. Two-Opting X. Specific Examples of Related Problems A. Parsing simple expressions to produce an expression tree B. Evaluating postfix expression using a stack C. Game Trees (Alpha-Beta Pruning) D. Traveling Salesman Heuristics E. Graph Algorithms such as Dijkstra’s Algorithm F. Huffman Algorithm G. Optimal Binary Search Tree H. Minimum Spanning Tree. XI. Notes 1. 2. 3. 4. 5. 6. 7. The grouping above is logical and does not coincide with the order in which the material is taught. The concept of a heap is saved until the heapsort is discussed. The BST sort is used as a tree example before the bulk of the other sorts are discussed. The algorithm analysis material is discussed as needed, primarily during the discussion of sorting and searching techniques. As recursion techniques are particularly useful for tree algorithms, recursion is primarily discussed in conjunction with this topic. Some of the possible applications of recursion to linear structures are also discussed. Program assignments are designed so as to require the student to implement data structures using all three basic implementation schemes. Program assignments are designed to implement at least: SLL and/or DLL, Stack and/or Queue, Binary Tree, MLL, Recursion, and Graph.