CIS 351 - Data Structures

Course Objectives


Upon successful completion of the course, a student should be able to: 1. Describe the basic knowledge to edit, compile, test run a computer program written by an imperative language.
2. Apply the basic programming constructs: branching, looping, recursion and Boolean functions to compose a computer program written by an imperative language.
3. Describe the procedures required to compose computer programs with IO operations and arrays written by an imperative language.
4. Identify the techniques of (1) parameter passing, (2) aliasing for the manipulation of arrays, and (3) exception handling in a given computer program.
5. Describe the rationale of exception handling and demonstrate its usage with code snippets.
6. Explain the following basic object-oriented programming concepts: class variables, class methods, instance variables, instance methods and identify their usage in a given Java class.
7. Define the key features of the stack data structure, explain a possible array-based implementation (ArrayStack) and discuss how to use an array in a backtracking scenario.
8. State the definitions of (big-O, big-Omega and big-Theta), discuss its use in analyzing the complexity of basic sorting and searching algorithms and apply the techniques (big-O, big-Omega and big- Theta) to analyze the complexity of the algorithms discussed.
9. Apply the analysis techniques (big-O, big-Omega and big-Theta) to determine the complexity of basic operations of the stack data structure.
10. Apply the techniques (big-O, big-Omega and big-Theta) to analyze the complexity of the usual queue operations data structure and evaluate the overall complexity of using the queue data structure in a typical application.
11. Explain what a Java reference is and explain the relations to the concept of pointers.
12. Illustrate, with the help of diagrams, how to use Java reference concept to build a node and to implement a linked-list based stack and/or a queue.
13. Explain the need to employ generic programming techniques, and explain its use to build the stacks and queue data structures via code examples.
14. Compose the key procedures regarding the implementation(s) of a stack and/or queue data structures using generic programming techniques.
15. Describe an implementation(s) of a stack and/or queue based on double linked lists.
16. Compare and contrast an implementation of either a stack or a queue via a singly linked list versus an implementation which uses a doubly linked list. Give a critique using the big-O, big-Omega and big-Theta analysis techniques.
17. Present the concept of hashing as an alternate search technique, state the basic features to perform hashing (hash functions and tables) and discuss the criteria to evaluate it effectiveness.
18. Show, with the aid of diagrams, two different ways open addressing to implement a hash.
19. Define trees and its basic parameters (paths, heights etc.); Discuss the use of each type of trees as a data structures and identify the key supporting operations.
20. State at least four possible ways to order the nodes of a binary tree; analyze, compare and contrast the implementations of the ordering algorithms associated to each of the methods stated.
21. Illustrate, with the aid of diagrams, a tree implementation of the dictionary data type.
22. State the definition of a binary search tree.
23. Describe, compare, contrast and analyze the implementations of the dictionary operations (insert, delete and find) of a binary search tree.
24. Present the main features of a priority queue, discuss an implementation that uses a binary search tree as the underlying data structure and analyze the running times of each of the operations for its maintenance.
25. Define the binary max-heap property as the defining property for a binary max-heap.
26. Explain, with the aid of diagrams and pseudocode, the key operations (1) heapify, and d(2) make-heap for the maintenance of the binary heap data structure. In addition, be able to analyze the worse running time of these operations.
27. Discuss heap sort as an application of using a binary max-heap data structure for sorting and its running time.
28. Discuss an implementation of the priority queue ADT by using a binary heap, and describe an implementation of each of the priority operations and discuss their worse running time.
29. Present the key features (depth of a node, depth of the tree) of a random binary tree.
30. Define the treap data structure and discuss its connections to the binary tree and heap.
31. State the definitions for undirected graphs and directed graphs, present their basic features and describe implementations that are (1) based on a two dimensional array, and (2) one that are based on array of linked lists.
32. Discuss, compare and contrast (1) the adjacent matrix representation, versus (2) the adjacency list representation as the underlying data structure for the graph data type.
33. Describe, with the aid of diagrams and pseudocode, two graph traversal method (1) breadth first search (BFS), and (2) depth first search (DFS).
34. Give an outline to solving each of the problems such as: detecting cycles, computing shortest paths, existence of a path between two given vertices, using either DFS and BFS.