Course Description : Studies the design and implementation of the most common algorithms associated with the basic data types and with some elementary data structures using C++. The relationship of algorithm design to problem solving in general is studied. The course also covers algorithms to improve the robustness and user friendliness of programs.

Course Statement of Objectives:

At the completion of this course this student will be able to:

1. Demonstrate familiarity with good software development practices involving design, coding, and testing

2. Demonstrate a good understanding of the benefits of using dynamically allocated memory

3. Demonstrate a mastery of the fundamental programming techniques necessary to implement, test, and use the List, Stack, and Queue data structures

4. Compare and make a critical assessment of data structures for specific applications

5. Demonstrate an understanding of the benefits of reusability of code via templates

6. Demonstrate a mastery of multi-file project organization.

Schedule of sessions :

Week 1 Value and reference arguments Default argument values Class definitions File organization Namespaces Overloaded operators Class templates Const qualification Const member functions Constructors

Week 2 Pointers The ‘new’ and ‘delete’ operators Limitations of arrays Dynamically allocated arrays The ‘heap’ versus the ‘stack’ An “Array” class implementation Destructors Copy constructors

Week 3 Collections Limitations of dynamically allocated arrays Concept of ‘linked lists’ A “Linked List” class implementation Comparison of arrays and linked lists

Week 4 Function templates Function overloading Linked Lists re-visited; incorporate overloaded operators More complex applications using linked lists

Week 5 Basic Stack operations A “Stack” class implementation Reverse Polish Notation expressions Detailed discussion of other Stack applications

Week 6 Basic Queue operations A “Queue” class implementation Circular arrays Detailed discussion of Queue applications

Week 7 Variations of Linked Lists Linked lists with “head nodes” Doubly linked lists Circular linked lists Multiply-Ordered Lists Generalized Lists

Week 8 Course review and exam