About CSC 172
Introduction to Algorithms and Data Structures

Spring, 1999

This course picks up where CSC 171, which most of you took last semester, left off. We'll learn more features of the Java language, but more importantly we'll continue studying algorithms and data structures for computational problem-solving.

Algorithm
A specification of how to accomplish a particular task. Many books use the example of a recipe in a cookbook, which specifies how to convert raw materials (eggs, flour, etc.) into a desired end product (a batch of cookies); other examples would be the procedure you go through to start your car, or to multiply two large numbers together, or the quadratic formula. Most books also define an algorithm as a sequence of operations, but the notion of sequence is not essential: the quadratic formula, for example, doesn't look like a sequence of operations at first glance, and in fact it can be evaluated in several different orders with no impact whatsoever on the result.

An algorithm is more or less independent of the language in which it is expressed: one can write essentially the same algorithm in Java, Pascal, C++, Visual Basic, and Scheme, although they will all look cosmetically different (with different sequences of semicolons, commas, braces, keywords, etc).

Data Structure
A specification of how to represent a particular kind of information in a computer. Most languages provide several "primitive" data types, e.g. integers, characters, and perhaps strings, functions, etc. But if the information you need to manipulate isn't exactly one of those kinds of information, you need to figure out how to represent it. For example, last semester we defined a class CartesianPoint to represent an ordered pair of integers, wrapped up together as a single object; and we defined a class Shish to represent an ordered list of kebabs of various sorts (lamb, tomato, etc.)

We'll use the same two textbooks for this course as we did last semester: Introduction to Programming using Java, by Arnow and Weiss, ISBN 0-201-31184-4, published by Addison Wesley Longman, and A Little Java, a Few Patterns, by Felleisen and Friedman, ISBN 0-262-56115-8, published by MIT Press.

Other documentation will be provided on-line or in handouts. For example, see my List of Adages on Software Development and Design, the Object Oriented Programming FAQ, and the Free Online Dictionary of Computing.

The syllabus is available in LaTeX, DVI, and Postscript.
An updated schedule will contain the latest updates to homework due dates, lecture topics, etc. Please check the schedule regularly and keep up on the assigned reading!

Who should Take This Course?

This course is the second half of Adelphi's first-year programming sequence. It assumes you have taken the first half, CSC 171, or the equivalent. If you took the first half in a language other than Java, you'll have some catching up to do, and you may also have already seen some concepts that will be presented in this semester. The course will be of some benefit to people who know a procedural programming language like Pascal, C, or Basic, and want to learn Java and/or object-oriented programming (OOP). I expect the class to include some computer science majors, some computer science minors, and some people here for just one or two courses.

If you want to learn how to use a computer (for word processing, spreadsheets, databases, Web browsing, email, etc.) and perhaps create your own Web page, but not write real computer programs yourself, you should probably take CSC 170, "Introduction to Computers and Their Applications", instead.

Homework Assignments

I'll try to give a homework assignment every week, due the following week. This means they'll have to be pretty short, becoming more ambitious and building on one another as the semester progresses.
Last modified: Tue Jan 5 14:00:29 EST 1999
Stephen Bloch / sbloch@boethius.adelphi.edu