COMP 210 is a continuation of Introduction to Programming (COMP 110) and provides students an opportunity to further develop and refine their programming skills. In particular, the emphasis of this course is on the organization of information, the implementation of common data structures such as lists, stacks, queues, trees, and graphs, and techniques of data abstraction, including encapsulation and inheritance. We will also explore recursion and the close relationship between data structures and algorithms.

Hands-on programming is a central component of this course. There will not be a weekly laboratory session, but there will be numerous mini-labs and outside programming assignments. Assignments will focus on the design, implementation, and testing of object-oriented programs.


At the conclusion of this course, you should understand common data structures and algorithms, and be able to apply that understanding to implementing new data abstractions and using existing library components. You should also be stronger programmers and feel comfortable programming in Java. In addition, you will know how to measure an algorithm’s efficiency in terms of running time and space and be knowledgeable enough to choose the best algorithms and data structure to solve a given problem.

About COMP 210

Prerequisites COMP 110 (Intro. to Programming).
Instructor Sandino Vargas-Pérez
Olds/Upton 208D, 337-7564
Dr. Vargas-Pérez's Schedule (including office hours)
Dr. Vargas-Pérez (preferred) | Prof. Vargas-Pérez | he, him, his
Email Rules Subject COMP210: Your Subject.
Example COMP210: About project 2
Required Text Lewis & Chase, Java Software Structures: Designing and Using Data Structures, 4th Edition, Pearson, 2014.
Book Cover
Recommended Vermeulen, et al, The Elements of Java Style, Cambridge University Press, 2000.
You can find other references in the class bibliography

Computing Resources and Software

To be able to successfully complete this course, you will be required to have the following tools:

  • Programming Language: Java
  • Development Environment: In class we will use the Eclipse development environment, which is open source software that runs on Macs, Windows, and Linux machines. If you have your own computer, you may want to download Eclipse (free -
    • Optionally, you can download and install BlueJ , also multi-platform and free!
  • Other: Miscellaneous resources will be provided to you during class in the form of handouts or links to electronic tools in the web, which will help you visualize, practice, and/or have fun while learning the concepts.

Topics to be Covered

The following are the topics we will be learning about and discussing during COMP 210 (and a tentative schedule for when each of them will be covered).

Week 1 Introduction to Data Structures: What are Data Structures? What are Algorithms? What are ADTs?
Review of UML, Java, and OOP
Time Complexity
Primitive Data Types (PDTs)
Arrays and ArrayLists
Week 2 Collection Classes
Stack ADT
Linked Structures
Week 3 Queue ADT
Queues as Arrays
Queues as LinkedLists
Week 4 Sequential and Binary Search
List ADT
Ordered, Unordered, and Indexed Lists
Lists as: Arrays and LinkedLists
Week 5 Midterm Review
Midterm Exam: Wednesday, May 1
Midterm Break
Weeks 6 Recursion
Analyzing Recursion
Recursion vs. Iteration
Time Complexity for Recursion
Weeks 7 Sorting and Sorting Algorithms
Recursion and Sorting
Analyzing Sorting Algorithms
Weeks 8 Tree ADT
Tree Traversal Algorithms
Binary Tree ADT
Binary Search Trees
Weeks 9 Heaps and Priority Queues
Map/Dictionary ADT
Hashing and Hash Tables
Weeks 10 Graphs ADT
Graph Algorithms
Review for the Final
Exam Week Final Exam is Monday, June 10, from 8:30 AM to 11:00 AM

Attendance and Participation

Regular attendance and fully engaged participation is expected of all students in this course. Your grade will be partially based on in-class projects, discussions, and occasional quizzes, so your attendance will affect your grade. Active participation in the class means being on time, being prepared, listening to others, contributing ideas of your own, and asking questions as they come up.

Assignments and Class Evaluation

Assignments, announcements, class notes, and other material will be made available on the course web site: Students are responsible for checking this resource frequently.

Reading assignments and discussion questions or exercises may be assigned for each class. You are expected to come to class having completed the assignment and being prepared to discuss both the ideas from the reading and your solutions to any exercises. You should also bring questions you have from the reading to class. You are encouraged to work on the discussion questions and exercises in groups; just be sure that each group member understands each answer well enough to present it to the class.

There will be 8 - 10 programming projects assigned throughout the quarter, which may take a week or longer to complete. The time required to write a program and debug it is difficult to predict, but time-management skills are as critical in industry as they are in college. I will make programming assignments available online far enough in advance that you will have some flexibility in scheduling your work, but you are responsible for budgeting your time wisely so that you will be able to complete your projects on time. Assignments must always be turned in on time unless you clear it with me in advance.

There will be 2 exams: a midterm and a cumulative final exam. The dates for the exams are posted in the class schedule.

Final Grade

Final grade will be based on:

  • Participation: attendance, discussion questions (DQ), occasional quizzes 10%
  • Mini-Labs: 8 to 10 in-class programming exercises 15%
  • Programming Assignments: 4 or 5 take home projects 35%
  • Midterm Exam 15%
  • Final Exam 25%

Programming Guidelines

Two documents, the CS Program Style Guide and Documentation Standards, describe the programming style and documentation standards for this course. Following these standards is an important step towards writing well-structured and reusable programs. You may use two templates that have been created to help you meet the documentation standards: the class template and main class template.

The CS Program Style Guide also provides a general description of the grading criteria used in this course.

Collaboration and the Honor System

This course operates in accordance with the principles of the Kalamazoo College Honor System: responsibility for personal behavior, independent thought, respect for others, and environmental responsibility. In particular, academic integrity is a fundamental principle of scholarship. Representing someone else's work as your own, in any form, constitutes academic dishonesty. Unauthorized collaboration and receiving help from others outside the bounds permitted by the instructor are also violations of the College honor system. You are responsible for working within the permitted bounds, and acknowledging any help from others or contributions from other sources.

Discussion questions: You should feel free to work with others on the discussion questions. As you work with others, keep in mind that the goal is not just getting a solution to the problem, but learning how to solve the problem yourself.

Laboratory Assignments and Programming projects: For many of the lab assignments and programming projects you will be permitted to work in pairs. I will try to be clear about whether a given lab or project must be done individually or may be done in pairs, but you are responsible for consulting with me if you are in any doubt. When teams are permitted, you should indicate both authors in the program documentation and turn in only one copy of the program for the team (not one for each team member). When you work with a partner, each individual takes full responsibility for the finished product, and each individual must be equally involved in developing the solution.

You may discuss the requirements and strategies of a programming assignment with others in the class, but you should not look at code belonging to anyone outside your team or make your code available to anyone other than your teammate. If you have code-specific questions you should address them to a course TA or computer science faculty member only. You should acknowledge in your program documentation any help you receive.

Exams should be entirely your own work.