CS 221

Learning Objectives



At the end of this course you should know how to:

Software Engineering

  1. List and discuss the 5 steps in software development.
  2. Demonstrate your ability to plan, organize, and write a Software Requirements Specification, a Software Design Description, and a Software Test Plan.
  3. Define algorithm, modularity, information hiding, encapsulation, and data abstraction and explain why they are important in program development.
  4. Compare and contrast top down program design and bottom up program design.
  5. Define unit testing, integration testing, acceptance testing, and regression testing and explain why each is important in the process of software development.
  6. Define Verification and Validation and explain what role it plays in software development.
  7. List and briefly define the five steps in the Software Engineering Institute's (SEI) Capability Maturity Model (CMM).
  8. What is Analysis of Algorithms? Explain what is meant by Big O Notation in algorithm analysis and list the 8 most frequently used O notation measures.
  9. Define and contrast iterative and recursive programming and give examples of each.
  10. Define Abstract Data Type and give examples.
  11. List and briefly define the 4 categories of operations (functions) used in C++ classes.

Pointers

  1. Declare pointers to each of the six basic C data types.
  2. Declare pointers to data structures.
  3. Assign address values to pointers.
  4. Pass pointers to functions as arguments.
  5. Use, manipulate and modify pointers in functions.
  6. Return values from functions using pointers.
  7. Dynamically allocate memory and set pointers to the new memory blocks.
  8. Use pointer arithmetic.
  9. Define heap and explain how it is used in dynamic memory allocation, and what is meant by first-fit allocation and best-fit allocation.

Data Structures

  1. Define data structures.
  2. Use typedef in defining data structures.
  3. Access fields of a data structure given the name of a data structure variable and a pointer to the data structure.

Arrays

  1. Declare and use arrays of characters and arrays of data structures.
  2. Use both array notation and pointer notation to access elements of an array

Object Oriented Programming

  1. Define terms related to object oriented programming including: object oriented programming, class, instantiation, class library, instance or member variables, instance or member methods, public, protected, private, super class, parent class, base class, subclass.
  2. Show how to create a class interface (header) file.
  3. Show how to create a class implementation (.cpp) file.

Lists

  1. Define the following terms related to the List Abstract Data Type: List, Linear Relationship, Sorted List, Unsorted List, Key, Linked List
  2. Demonstrate how to declare structures to be used in simple linked lists, double linked lists, and circular linked lists.
  3. Explain, with code examples, the algorithms for inserting, deleting, and searching in a simple linked list.
  4. Define and discuss the following dangers in linked lists: dangling pointers, failure to provide for garbage collection, dereferencing the NULL pointer, forgetting to mark the end of a list, and problems with boundary cases.

Stacks and Queues

  1. Define and contrast stacks and queues as abstract data types.
  2. Demonstrate how to implement stacks and queues as arrays and linked data structures.
  3. Explain, with code examples, the algorithms for initializing, pushing, popping, and checking for a full/empty stack.
  4. Explain, with code examples, the algorithms for initializing, enqueueing, dequeuing, and checking for a full/empty queue.

Trees

  1. Demonstrate how to declare structures to be used in binary trees.
  2. Explain, with code examples, the algorithms for inserting, deleting, and searching for nodes in a binary tree.
  3. Explain what is meant by a balanced binary tree and why it is important.
  4. Describe what a heap is when referring to a tree structure.
  5. Describe AVL trees, what the definition of AVL property is and demonstrate the ability to identify diagrams of trees as to whether they have the AVL property.
  6. Discuss, with diagrams, the algorithms for a single left rotation, single right rotation, double left rotation, and double right rotation in AVL trees.
  7. Define, with diagrams, the structure of a 2-3 tree.
  8. Define, with diagrams, the structure of a B tree.
  9. Define, with diagrams, the structure of a Trie tree.

Graphs

  1. Define terms related to graphs including: vertices, edges, weighted graph, directed graph, undirected graph, adjacent vertices, path, length of a path, cycle, simple cycle, connected vertices, connected components, adjacency set, degree of a vertex, predecessors, successors.
  2. Describe and explain standard graph symbolic representations.
  3. Demonstrate how to represent graphs in code using an adjacency matrix and an adjacency set.
  4. Discuss a basic search algorithm for graphs and contrast this search when the list of nodes to be searched is stored as a stack or a queue.
  5. Define minimal spanning tree and discuss, with diagrams, Prim's algorithm for finding the minimal spanning tree of a graph.
  6. Define shortest path and discuss, with diagrams, Dijkstra's algorithm for finding the shortest path from node x to node y of a graph.

Hashing

  1. Define terms related to hashing including: hash function, double hashing, collision, collision resolution, mapping, perfect hash function, load factor, cluster.
  2. Define how the following hashing techniques work: open addressing with linear probing, open addressing with double hashing, chaining, hashing with buckets.
  3. List and discuss 5 different techniques for calculating a hash function.
  4. Discuss some of the considerations when selecting a hash table size.

Sorting

  1. List the categories and examples of sorting techniques which the author groups into the two sorting themes Comparison-Based Sorting and Address Calculation Sorting.
  2. Discuss the algorithm for implementing each of 10 sorting techniques and give the O notation measure of the algorithm's speed.