Data Structures

Notes on final grades: Wednesday, December 9: Quiz Monday, December 7: Review Friday, December 4: Red-black trees Wednesday, December 2: AVL trees Monday, November 30: Binary search trees Friday, November 20: Trees Wednesday, November 18: Backtracking Monday, November 16: Recursive algorithms Friday, November 13: Recursion Wednesday, November 11: Hash codes Monday, November 9: Hash tables Friday, November 6: Exam Wednesday, November 4: Review Monday, November 2: Quiz Friday, October 30: Review Wednesday, October 28: Maps Monday, October 26: Sets Friday, October 23: Iterable Wednesday, October 21: Deques Monday, October 19: Stacks & queues Wednesday, October 14: Iteration Monday, October 12: Linked lists Friday, October 9: Linked lists Wednesday, October 7: Generics Monday, October 5: ArrayLists Friday, October 2: Exam Wednesday, September 30: Review Monday, September 28: Quiz Friday, September 25: Review Wednesday, September 23: Sorting Monday, September 21: Efficiency Friday, September 18: Arrays Wednesday, September 16: Arrays Monday, September 14: Inheritance Friday, September 11: Inheritance Wednesday, September 9: Interfaces Friday, September 4: Testing Wednesday, September 2: Classes Monday, August 31: Strings and IO Friday, August 28: Java refresh Wednesday, August 26: Introduction
Course overview

Data structures are ways to organize information in computer programs. The array is the classic example, but other options include lists, stacks, queues, sets, maps, and trees. Choosing the right data structure is often the key to writing an efficient program. In this course, you will learn to:

This course serves as a bridge from the introductory courses to the upper-level CS curriculum. It introduces key concepts for later courses and develops valuable habits for good programming.


Our CS 219 or something similar. This course assumes that you have some experience with object-oriented programming in Java.


Data Structures: Abstraction and Design Using Java, 2nd Edition by Koffman & Wolfgang. Reading is likely to improve your understanding of concepts from class, and will sometimes teach you additional details.

Office hours

These are all the times when I'm likely to be in my office. Come by at any of these times and you will probably find me. If you want to be sure, you can make an appointment in class or through email.


If your learning or participation in this course may be affected by a disability or any other factor, please talk to me early in the semester so that we can arrange appropriate accommodations. I will do my best to ensure that everyone can learn effectively.


Being in class will be crucial for your learning in this course. Absences will leave holes in your understanding of course concepts. If you must miss a class, you are expected to work to get caught up before the next class.

Grading policy

Your final grade will be an average of exams (50%), homework (40%), and quizzes (10%). This table shows how averages translate to the 4-point scale. Be aware that I set a high bar for a 4.0 (an average of at least 96%).

Academic integrity

It is important to me that you conduct your work in this course with academic integrity. That means abiding by the specific policies outlined here, as well as the general guidelines in the Student Handbook. It is my responsibility to report violations of these policies to the Dean.


Problem sets will be assigned weekly. Most will involve coding in Java, and some will also involve written work.


There will be three exams, each covering about a third of the course, with written problems based on the homework. Specific dates will be set as they approach.


There will be three quizzes that give you lower-stakes opportunities to evaluate your progress. Specific dates will be set as they approach.


Things you might find useful:

We will use Sakai for homework submission and grade tracking.