CS35: Data Structures and Algorithms

Basics | Textbook | Resources
Spring 2018


Welcome to CS35. This course continues the broad introduction to computer science begun in CS21, providing a general background for further study in the field. By concentrating on data structures and algorithms, you will obtain the basic building blocks by which all large software projects are built. These topics are central to every sub-discipline in computer science, and also connect to central concepts across the sciences. Topics to be covered include object-oriented programming in C++, advanced data structures (such as priority queues, trees, hash tables, and graphs), advanced algorithms, as well as software design and verification. At the end of this course, you will have obtained the ability to successfully analyze problems in the discipline. You will also take your first steps towards developing the skills necessary to synthesize and evaluate the must fundamental questions in the field.

Course Basics

Lecture: Tue., Thu. 1:15PM-2:30PM, Science Center 199
Lab A: Monday 8:50AM - 10:20AM, Science Center 240
Lab B: Monday 1:15PM - 2:45PM, Science Center 256
Lab C: Monday 3:00PM - 4:30PM, Science Center 256

Instructors: Martin Gagné (Lecture, Lab B, Lab C)  Lisa Meeden (Lab A)
Email: mgagne1 at cs dot swarthmore.edu meeden at cs dot swarthmore.edu
Office: Science Center 270 Science Center 243
Office Hours: Tuesday 3:00-4:00pm
Wednesday 2:00-3:30pm
Friday 2:00-3:30
and by appointment

Wednesday 1:30-3:30pm

Lab Assignments: weekly, due Sunday 11:59PM
Ninjas: Kyra Moed, Kei Imada, Michelle Ma, Rye Buckley
Ninja Sessions: Thursday 7-9PM: Sci 256
Saturday 2-4PM: Sci 256
Course Discussion: Piazza (by invitation, mandatory enrollment)


This course will use clickers to facilitate feedback, discussion, and student evaluation during class. For many upper level courses including CS35, we are now requiring that students purchase their own clicker for personal use. Please see the department clicker page for purchasing and registering information.

Course Textbook

There is no required textbook for the course, but you may consider either of two text books as a companion reference for the course:

We will post readings from both books; you only need to choose one though. The first book is a freely available textbook online exploring data structures and algorithms in C++. We plan on using the second book when we design lectures, but we will not necessarily follow the style of C++ coding from either book. This book is useful for coming at material from a different view point than lecture (some students find this confusing, others find it useful), and there are also several problems at the end of each chapter for studying. Both are reliable references but is your choice which you prefer to use.

In addition, you will need to read A Transition Guide from Python 2.x to C++ by Michael Goldwasser and David Letscher for the first week or two.

Debugging references

Learning how to debug code efficiently is part of this course material. Many of the lab assignments in this course will be more involved than what you have seen in CS21, and debugging will be essential. Some references for debugging tools:

Additional references

This course provides an introduction to object oriented programming as well as the C++ program language. Each could warrant their own course of study and we highly recommend you study them further. Some references of use: