General information

Instructor: Richard Eisenberg
Office Phone: 610-526-5061
Home Phone (emergencies only): 484-344-5924
Cell Phone (emergencies only): 201-575-6474 (no texts, please)
Office: Park 204
Office Hours: Wednesdays 10:30am-12:30pm
If these don’t work, do not fret. Email instead.
Lecture: TR 9:55-11:15am
Lecture Room: Park 336
Lecture Recordings: at Tegrity: access via Moodle; look for link on right side of screen.
Lab: W 2:40-4:00pm, Park 231
GitHub Repo:
Piazza Q&A Forum:
TAs: Sonya Fucci <>, My Nguyen <>, Tessa Pham <>, Ricki Su <>
Time TA Location
Sundays 6-8pm Ricki Su Park 231
Sundays 7-9pm Sonya Fucci Park 231
Mondays 6-8pm Tessa Pham Park 231
Mondays 7-9pm My Nguyen Park 231
Tuesdays 7-9pm Ricki Su Park 231
Wednesdays 6-8pm Tessa Pham Park 231
Wednesdays 7-9pm Sonya Fucci Park 231
Thursdays 7-9pm My Nguyen Park 231

Goals of course

By the end of this course, you will be able to…

During the course, you will…

This is a second course in computer science, focusing on elementary data structures and algorithms. A data structure is a way of organizing information in a computer for easy use. A standard dictionary is a real-life example of an efficient data structure: by being alphabetized, a dictionary makes looking up the definition of a given word easy. In contrast, a standard dictionary is very inefficient if you want to look up a word from its definition. In the same way, data structures in computer science can be efficient for one task, but poor for another.

This course will cover the key data structures in computer science, including standard arrays, expandable arrays, linked lists (singly linked, doubly linked, and circular), binary search trees, and hash tables. These concrete data structures will be used to power abstract data types such as lists, queues, stacks, sets, and maps. Along with these data structures, we will discuss the algorithms (procedures) for operating with them.

In order to understand data structures well, we need to have a way of comparing one to another. Specifically, we want to know which operations are “slow” and which are “fast”, so we’ll need a way of defining “slow” and “fast”. We use asymptotic complexity analysis to do this, and we will learn how to use this analysis to classify algorithms and data structures. We will use sorting algorithms as a case study in algorithmic comparison.

All semester, students will complete rigorous coding assignments in Java. Java is a very widely used programming language. It is object-oriented, meaning that it has a powerful type system, capable of separating out the notion of concrete data structure from abstract data type. By the end of the semester, students will have gained considerable experience programming in Java.

Course Philosophy

In order to learn any programming skill, you must simply do it. Reading a book or watching me code will not help you get better. This course is thus programming-intensive. You will be expected to spend a significant amount of time weekly (6-8 hours) outside of class programming to complete the homework assignments. If you run into a snag, the programming burden may prove to be even higher. Of course, programming is fun, so the time should fly by.

Much class time in CS206 will be spent working with peers to solve small programming problems, conduct peer reviews, and complete other exercises. There will also be lecture components.

Koffman/Wolfgang text cover


The textbook for this course is:

We will make extensive use of the Java API. The documentation for this API is here:

Testing will be done using a library called JUnit. Here are some useful JUnit links:

Our programming will be done using Eclipse, a professionally-used integrated development environment (IDE). This free software is powerful and can be intimidating for new users. You will quickly get used to it, and we’ll take some time during labs to familiarize you with it. Instructions for setting up this software on your machine will be distributed in the first lab.