COMPSCI 186 Using Data Structures

Instructor: Neena Thota; David Wemhoener


Office:  LGRC A353B;

Office Hours: TBA





Course description: 

COMPSCI 186 introduces foundational abstract data types and algorithms. The main focus is on the use of data structures in designing and developing programs to solve problems in a variety of domains. Specific topics include lists, sets, maps, graphs, stacks, queues, searching, and sorting. There will be weekly programming assignments, programming and written exercises in discussion sections, regular quizzes, and a cumulative final exam.


COMPSCI 121 (or equivalent experience). This course is not a substitute for COMPSCI 187. If unsure of whether this course or COMPSCI 187 is more appropriate, contact instructor.

Who is this course for?

COMPSCI 186 is intended for students who have completed COMPSCI 121. It focuses on appropriate use of, rather than the implementation and analysis of, the data structures studied in COMPSCI 187, along with additional structures (such as sets and maps) that are useful for practical programming.

For some students, 186 can serve as an alternative to 187. It will be recognized as one of the core courses for the proposed Informatics major, and the practical programming with data structures in 186 will be adequate preparation for some courses such as COMPSCI 326.

Computer Science majors (both BA and BS) must still take 187, which is a prerequisite for all the 200-level core courses. Many majors and applicants to the major will find 186 to be good additional advance preparation for 187.

Course overview


COMPSCI 186 requires students to engage in extensive problem solving and critical thinking. In particular, through a project-based curriculum, students expand their ability to design, reason about, and implement non-trivial algorithms and data structures in a general-purpose programming language.

As the course progresses, project scope expands, and the amount of explicit guidance that students are given is decreased. To succeed, students must incrementally improve their programming ability. Thinking in abstractions, planning large (multi-file) programs, and learning to understand why a program does or does not work as expected are activities that require significant critical thinking and problem solving.

In addition to programming projects, students complete both in-class and take home exercises, about six half-hour quizzes and a final exam. Among other things, these activities serve to evaluate other aspects of critical thinking and problem solving that are better assessed in a written format. For example, students might be asked to determine the asymptotic running time of a snippet of code; to show (on paper) how a particular algorithm would operate on a given data set (such as a graph traversal algorithm); to identify logical errors in code; or to compare how operations defined by set theory and by the set implementation of programming language differ.

Required material:

An iClicker2 (ISBN 9781319202989) is required for this course. You will need to bring it to every course meeting, including the first one.

Most technical material will be presented in lecture or on the course website in Moodle. We will use the OpenDSA eTextbook (which is free for students) for home work exercises. For students who want additional references, there are several optional resources:

*       The Java Tutorials are guides to the Java language. Specific trails to follow are noted in the schedule.

*       Similarly, the Java Platform API provides a comprehensive description of all classes Java Platform; we will make extensive use of some of them and they are fully documented by Oracle.

*          Think Java: How to Think Like a Computer Scientist, 6th edition, by Allen B. Downey and Chris Mayfield. It primarily focuses on the craft and science of problem solving with computers, with a secondary focus on Java. You may find this book useful to review before the start of the semester or during the first few weeks of this course.

*          Learning Java, 4th edition, by Patrick Niemeyer and Daniel Leuck. This book is aimed at working programmers, not computer scientists, and focuses much more on use of Java, tooling in the Java ecosystem, and practical considerations than Think Java. You may find it useful when using some of the tools we require in this course, and when completing some of the advanced (and optional) parts of later programming assignments.

*          Java Precisely, 3rd edition, by Peter Sestoft. If you want to know something about the Java language - syntax or semantics - this book is a great reference. Note that it is not a textbook or a how-to manual, but a reference book that explains what specific part of the language mean. It also provides some explanation of important parts of the Java standard library (also known as the class library or Java Platform API).

*          Eclipse IDE Pocket Guide, by Ed Burnette. You might find it helpful to have a guide to Eclipse, the Integrated Development Environment (IDE) we will be using in this course. The Pocket Guide is not comprehensive, but it is a valuable reference to the most commonly-used parts of the IDE.

Course Grading:

The relative value of the various course components is approximately as follows:

35% programming assignments
20% homework and lab assignments
10% in-class exercises
20% quizzes
15% final exam

The numerical cutoff for final course letter grade assignment will be made after all grading is completed. As a rough guide, expect to require at least a 93 to get an A, a 90 to get an A-, an 87 to get a B+, an 83 to get a B, an 80 to get a B-, and so on.

There are no opportunities for extra credit in this course.

Course Policies:

Attendance: Attendance is required for lectures and discussions.

For all excused absences, you are offered an opportunity to make up missed work. The excuses that will be accommodated with written documentation are: Medical conditions, religious or funerary events, university-related event (athletic event, field trip, or performance), extenuating non-academic reasons (military obligation, family illness, jury duty, automobile collision). Problems with computer or internet access, holiday or family travel, are not valid excuses.

Incompletes: Incompletes will be granted only in exceptional cases, and only if you have completed at least half the course with a passing grade. Prior to that, withdrawal is the recommended course of action.

Late submissions: If you need an extension for an assignment, contact us a reasonable amount of time - generally, at least a full business day- before the assignment is due. If you are incapacitated for one or more days up to and including the due date, you should submit written documentation explaining your inability to work on course material in order to consider granting an extension.

Academic Honesty Statement: You may discuss material with others, but when collaboration is forbidden (as it is on programming assignments), your writing (code and prose) must be your own. Publicly or privately redistributing solutions to exercises, homework, or assignments for this course is considered an act of academic dishonesty. Please refer to the UMASS Academic Honesty Policy and Procedures for guidelines on sanctions that may be imposed on any student who has committed an act of academic dishonesty (

Accommodation Statement: Any student who requires an accommodation due to a disability is directed to contact the UMASS Disability Services: to obtain the appropriate accommodation forms. If you have a documented disability that requires an accommodation, please notify us within the first week of the semester. Our goal is to provide every student with a high-quality learning experience. Please contact us if you have any questions or concerns about disabilities or any issue that may impact the quality of your learning.