Department of Computer Science
CS 2101 - Data Structures 

Spring 2018 Syllabus

COURSE OBJECTIVES: 

Solving complex computational problems requires the use of appropriate data structures, such as stacks, priority queues, search trees, dictionaries, hash tables, and graphs. It also requires the ability to measure the efficiency, or "complexity" of operations like sorting and searching, in order to make effective choices among alternative solutions. This course is a study of data structures - their design, implementation, and effective use in solving computational problems. Laboratory exercises in Java will provide an opportunity to study the characteristics of these data structures directly. In addition the course will begin with an intensive introduction to the Java language.


The primary goal of the course is to give you the skills and experience necessary to be able to independently write complex programs that run effectively and efficiently. To that end students will be expected to work independently as much as possible and especially in the second half of the semester.


PREREQUISITES:

CSCI 1101 or CSCI 1103 or permission of instructor. You should be comfortable working with some programming language (probably Python, but possibly Java), but do not need any specific Java experience.


TEXTS: 

Java Structures: Data Structures in Java for the Principled Programmer Bailey, 2007, Available as a free download

https://www.bowdoin.edu/~sbarker/teaching/courses/fall17/ds/files/JavaStructures.pdf

Note: hard copies of earlier editions of the book are significantly different.

On-line handouts and Oracle’s Java page: http://www.oracle.com/technetwork/java/api-141528.html

DEVELOPMENT ENVIRONMENT:

https://www.bluej.org

INSTRUCTOR: 

Eric Chown, 221 Searles Science Building

Web address: http://www.bowdoin.edu/~echown

Office Hours: MW 1-3. 

TEACHING ASSISTANT

TBA

Office Hours: TBA. 

MEETING TIMES: 

Class meeting: TTH 1:00-2:30 - Searles 128

Lab meeting: W 11:30-12:55 - Searles 128

Note: Not all of the “Lab” sessions will be devoted to labs. Lab will normally occur once a week, and will normally be during the Wednesday meeting, but not always.


COURSE OUTLINE: 

Week of 

Topics 

Readings 

Work Due

Jan 23

Java Basics - Types, Functions, Conditionals, Loops

Bailey Ch 0, 1, Appendix B

Jan 30

Java Programming - Strings, Objects, Interfaces, Inheritance

Bailey Ch 1, 2, Appendix B

Feb 6

Java - Lists, Maps, Generics, ArrayLists

Bailey Ch 3, 4

Feb 13

Program Analysis

Bailey Ch 5

Feb 20

Lists

Bailey Ch 9

Feb 27

Exam 1

Mar 6

Recursion

Bailey Ch 5

Mar 13-20

Spring Break

Mar 27

Stacks and Queues, Iterators

Bailey 10, 11

Apr 3

Trees

B 12

April 10

Exam 2

Apr 17

Priority Queues, Heaps 

B 13

Apr 24

Binary Search Trees, AVL Trees

B 14

May 1

Hash Tables

B 15

May 8

Review 





WORK FOR THE COURSE: The work for this course includes class participation, readings, three tests, a number of weekly lab assignments (usually around 10), numerous in-class assignments, and a final project. Lab assignments can be downloaded directly from this Web page on the Wednesday of the week when it is assigned. All work will be graded and will contribute to your course grade. As a rule in-class assignments are simply checked for completeness and labs are graded more thoroughly. Approximately 60 percent of your grade will be based upon the three exams. The rest will be based on lab and class performance. Attendance is required for all scheduled classes and lab meetings. Since the major goal of the course is to teach you programming, not handing in any lab is grounds for failing the course. This does not assume, however, that all labs will be completed satisfactorily.

One of the goals of the course will be to learn the difference between programs that simply work, and quality programs. Therefore do not assume that completing the assignment will result in an "A" program. We will discuss guidelines extensively in class. 

Lab work will normally be done individually or, in some cases, in teams of two (your choice), but written lab exercises should be completed individually. Each lab assignment should be turned in on the Wednesday following the week it is assigned no later than the start of Wednesday's lab. Students are expected to follow Bowdoin's Computer Use Policy and its Academic Honor Code as well as the departmental policy. 

Discussion Forum

We will use Piazza to facilitate discussion outside of class. In general, you should prefer posting questions to Piazza over sending email to an instructor as it will allow your classmates to both see and answer your questions, possibly quicker than I can myself.

Here is the piazza page:  https://piazza.com/bowdoin/spring2018/csci2101/home

Late Policy 

To be considered on time, assignments must be turned in at the specified time on the due date. The reason is that it is essential that you do not fall behind in the course. Further, once the assignment is due I will no longer provide help on it. In addition you may not work on late assignments during class time. The late penalty for assignments is 25% per day. You will, however, have three "flex" days to use over the course of the term to submit labs late without penalty. Once flex days are exhausted the above policy will be used. Note that because of the flex days I will only grant additional extensions in truly extraordinary circumstances. Failure to hand in an assignment is grounds for failing the course.