This text may be used in either a one semester or a two semester course. The course which I teach at Waterloo is a one-semester course that comprises 36 lecture hours on the following topics:

- Review of the fundamentals of programming in C++ and an overview of object-oriented programming with C++. (Appendix ). [4 lecture hours].
- Models of the computer, algorithm analysis and asymptotic notation (Chapters and ). [4 lecture hours].
- Foundational data structures, abstraction and abstract data types (Chapters and ). [4 lecture hours].
- Stacks, queues, ordered lists and sorted lists (Chapters and ). [3 lecture hours].
- Hashing, hash tables and scatter tables (Chapter ). [3 lecture hours].
- Trees and search trees (Chapters and ). [6 lecture hours].
- Heaps and priority queues (Chapter ). [3 lecture hours].
- Algorithm design techniques (Chapter ). [3 lecture hours].
- Sorting algorithms and sorters (Chapter ). [3 lecture hours].
- Graphs and graph algorithms (Chapter ). [3 lecture hours].

Depending on the background of students,
a course instructor may find it necessary to review
features of the C++ language.
For example, an understanding of *templates* is required
for the *foundational data structures* discussed in Chapter .
Similarly, students need to understand the workings of *classes*
and *inheritance* in order to understand
the unifying class hierarchy discussed in Chapter .

Copyright © 1997 by Bruno R. Preiss, P.Eng. All rights reserved.