CS 201 Data Structures Spring 2019

Course Information

Course Homepage:
go/cs201 or http://www.cs.middlebury.edu/~schar/courses/cs201-s19/

Time and Place:
Lecture: MWF 8:00-8:50 (A) and MWF 9:05-9:55 (B) in MBH 104
Labs: Thu 11:00-11:50am (Y) and Thu 1:30-2:20pm (Z) in MBH 632

Daniel Scharstein
640A McCardell Bicentennial Hall

Office Hours:
MWF 10:30-noon, Tue 1:30-3pm, and by appointment

Lab Assistant:
Ruben Gilbert
rgilbert@middlebury.edu, 443-5915

Free online Textbooks:
Java Structures, 7 edition [pdf], Duane A. Bailey, 2007
Thinking in Java (html) [non-frames version], Bruce Eckel, 2003

Course description

This course stresses ideas and structures helpful in designing and implementing algorithms, especially for solving large or complex problems. Important concepts in this context are data abstraction and modularity, which should be familiar from your first CS course. In this course, we will introduce many important data structures such as vectors, lists, stacks, queues, trees, and graphs, and discuss various ways to implement these structures. We will also cover in depth the concept of algorithmic complexity, and compare the different implementations terms of time and space efficiency. The course will also introduce object-oriented programming using the programming language Java; however, the main focus will be on data structures, not on the new language.
Prerequisites: CSCI 101 or 150 or 190; or AP CS; or permission of the instructor.


The following is a tentative schedule of topics to be covered in this course. Readings refer to the text by Bailey.

Week    Topic Reading

1 Intro, Java Ch 0, 1, 2, B
2 Object-oriented programming Ch 1
3 Algorithmic complexity, vectors, sorting Ch 3, 5, 6
4 More sorting, generics Ch 4, 6
5 Lists Ch 9
6 Stacks, queues, Midterm 1 Ch 10
Spring break
7 Iterators, ordered structures, trees Ch 8, 11, 12
8 Priority queues, heaps Ch 13
9 Applets, search trees, balanced trees Ch 14
10 Maps, hashtables, Midterm 2     Ch 15
11 Graphs, graph algorithms, graphics, events      Ch 16
12 Threads, animation, final projects

Assignments, Exams, and Grading

There will be weekly homeworks, consisting of programming assignments in Java and/or written assignments. Usually, homeworks will be posted on Wednesdays, and will be due the following Wednesday at 8am. Late work will not be accepted. However, each student is allotted two 24-hour extensions to use for any homework assignment during the term, except HW 1. No more than one extension may be taken per homework, and the second extension may not be taken for HW 1-5. If you have not completed an assignment, you should still turn in whatever you have for partial credit. In extenuating circumstances (e.g., sickness, personal crisis, family problems, religious holidays), you may request an additional extension. Such extensions are more likely to be granted if the request is made before the due date.

Your final grade will be based on homeworks (40%), two midterm exams (15% each), and a final exam (30%). The first midtem is scheduled for Tue 3/19, 7-9pm. The second midterm is a one-week take-home exam requiring the use of a computer, and is scheduled between Wed 4/24 and Wed 5/1. The final exam is scheduled for Thu 5/16, 7-10pm, or Fri 5/17, 9-noon (you may attend either slot). All exams will be open notes, but no electronic devices.

Collaboration Policy and Honor Code

The computer science faculty believes that collaboration fosters a healthy and enjoyable educational environment. For this reason, you are encouraged to talk with other students about the course, to form study groups, and to use the online discussion forum to post questions and help each other.

Unless otherwise instructed, feel free to discuss problem sets with other students and exchange ideas about how to solve them. However, there is a thin line between collaboration and plagiarizing the work of others. Therefore, it is required that you must compose your own solution to each assignment. In particular, while you may discuss strategies for approaching the programming assignments with your classmates and may receive debugging help from them, you are required to write all of your own code. It is unacceptable (1) to write a program together and turn in two copies of the same program or (2) to copy code written by your classmates. This implies that you should never have in your possession a copy of all or part of another student's work. It is your own responsibility to protect your work from unauthorized access. The exams must be entirely your own work.

In keeping with the standards of the scientific community, you must give credit where credit is due. If you make use of an idea that was developed by (or jointly with) others, please reference them appropriately in your work. E.g., if you get a key idea for solving a problem from person X, your solution should begin with a note that says "I worked with X on this problem" and should say "The main idea (due to X) is ..." in the appropriate places. It is unacceptable for students to work together but not to acknowledge each other.

When working on homework problems, it is perfectly reasonable to consult public literature (books, articles, etc.) for hints and techniques. However, you must reference any sources that contribute to your solution. It is also OK to borrow code from the textbook, from materials discussed in class, and from other sources as long as you give proper credit. Assignments and solutions from previous terms are not considered to be part of the "public" literature, and consulting problem set solutions from previous terms constitutes a violation of the Honor Code. Finally, the use of Java decompilers is expressly forbidden.

If you are uncertain how the Honor Code applies to a particular assignment, please ask me. The Department of Computer Science takes the Honor Code seriously. Violations are easy to identify and will be dealt with promptly.

ADA information

Students who have Letters of Accommodation in this class are encouraged to contact me as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. For those without Letters of Accommodation, assistance is available to eligible students through Student Accessibility Services. Please contact the ADA Coordinators Jodi Litchfield (litchfie@middlebury.edu, x5936) or Michelle Audette (maudette@middlebury.edu, x2169) for more information. All discussions will remain confidential.