CSC 172
Introduction to Algorithms and Data Structures

Fall, 2001

What's this course about?

This course serves several purposes: it's a second course in computer programming; it teaches more of the C++ computer language; and it begins the systematic treatment of algorithms, data structures, and object-oriented programming. First and most simply, you'll get more experience in programming, with larger and more complex programs than you've written before.

Second, most of you studied the C++ language last semester, but didn't get to some of its most important capabilities, such as classes. You'll learn some additional language features this semester, but the emphasis will gradually shift away from language syntax towards design principles that work in any programming language.

Third, we undertake algorithms and data structures as a topic of study in themselves. An algorithm is a method of solving a computational problem, typically embodied in a computer program, but the same algorithm can form the basis of different programs in different languages. A data structure is a way of organizing information (e.g. an array, structure, list, or tree) so that we can find the parts we want easily and efficiently. Object-oriented programming is an approach to programming that has proven extremely useful in writing and modifying large, complex programs; Java, C++, some versions of Scheme, and most other modern programming languages specifically support object-oriented programming.


I used the same textbook last semester, and some students complained that it didn't provide enough "real" C++ code, describing too many of the algorithms in pseudocode instead. I had the opposite reaction: whenever I got to a section of the book that consisted of pages and pages of C++ code, my eyes glazed over and I skipped ahead to the next interesting part. The difference is that the students expected this to be a course about the C++ language, like 171, while I intended it to be about algorithms and data structures, discussing the C++ (or any other) language only as absolutely necessary. Analogously, if I were teaching a course on Shakespeare, I wouldn't want to spend class time on English spelling, punctuation, and grammar.

So please keep this distinction in mind as you go through the course. The language details are "vital, but not important": you can't write working programs without them, but they don't provide any interesting ideas, and can easily distract us from the interesting ideas that can be found in computer science, if we don't confuse "computer science" with "writing code".

For more information, see the syllabus.

Last modified: Fri Jan 25 16:50:18 EST 2002
Stephen Bloch /