CSCI 2101
Data Structures

Bowdoin College
Fall 2017
Instructor: Sean Barker

Course Overview

This course builds on the programming skills acquired in an introductory computer science course and couples work on program design, analysis, and verification with an introduction to the study of data structures. Data structures capture common ways in which to store and manipulate data, and are essential to the design of complex computer programs. The use of appropriate data structures allows for both efficiency (e.g. memory usage and runtime) and scalability (e.g. large data sets) of algorithms. We will study some of the most important and frequently used data structures, such as lists, stacks, queues, trees, and hash tables, and will analyze their efficiency in a mathematical framework. Along the way, we will emphasize the development of clear, modular programs that are easy to read, debug, analyze, and modify. Lab assignments will involve writing complex programs in the Java programming language.

Primary course goals include:


CSCI 1101 (Intro to Computer Science) or CSCI 1103 (Accelerated Intro to Computer Science) or permission of the instructor. You should be comfortable working in a programming language such as Python, Java, or C, but do not need to have any prior experience with Java specifically.


Instructor: Sean Barker
Office: Searles 220
Phone: 207-798-4220
Office Hours: Monday/Thursday 2-3:30, or by appointment.

TAs: (drop-in lab hours in Searles 128)
David Reichert (dreicher): Sunday 6-8 PM
Grace Mallett (gmmallet): Monday and Tuesday 7-9 PM
Michelle Albright (malbrigh): Wednesday 8-10 PM

Course Requirements

Attendance during class and lab sessions, completion of roughly weekly programming assignments, and three exams (two midterms and a final). Evaluation will be as follows:

Lab programs will be a mix of individual and group assignments, and will be graded on design, documentation and style, correctness, and efficiency. These assignments will demand a significant time commitment on your part, and it is critical that you budget your time accordingly.

Each student will have 3 flex days with which to submit a lab late without penalty. Once flex days are exhausted, past-due labs will be penalized a letter grade per day.

Discussion Forum

We will use Piazza to facilitate discussion outside of class. In general, you should prefer posting to Piazza over sending me email, as it will allow your classmates to both see and answer your questions, possibly quicker than I alone can (though you can also post privately such that only I can see your question).

Here is the CSCI 2101 Piazza page.


We will make limited use of the following (free!) textbook:


D. Bailey. Java Structures: Data Structures in Java for the Principled Programmer, Root 7 Edition (2007). Available as a free PDF download.

Note: while you are welcome to print portions of the electronic copy of the book, be wary of hard copies of earlier editions (eg 2nd edition, pictured to the right), which are significantly different.

Class Information

Mondays, Wednesday, and Thursdays
11:30 AM - 12:55 PM
Searles 128

Note that while Thursdays are officially designated as 'lab', we may use lab periods as class or vice versa. In general, one meeting per week will be used as a lab period.


Electronic Device Policy

Use of laptops in-class is permitted for note-taking or other class-related purposes. Cell phones should be silenced and put away during class to avoid disruptions.

No electronic devices, including computers, phones, or calculators, are permitted during exams unless specifically indicated by the instructor.

Collaboration Policy and Honor Code

Please review the Computer Science Collaboration Policy. You are responsible for reading, understanding, and adhering to this policy.

Note for version control system users (e.g., git): While you are welcome to use version control systems such as Git or Subversion to collaborate within your team (or to store your own code), you may not store or post any code in publicly-available repositories (such as public repositories on GitHub). If you would like to use a service like GitHub, you must use a private repository.