CSCI 151: Data Structures

Semester: Spring 2019
Room: King 237
Class Time: Mon/Wed/Fri 10:00pm-10:50am
Mon/Wed/Fri 11:00pm-11:50am
Office Hours: RH: T: 15:00-17:00pm, W: 14:30-16:30
CT: M: 15:30-17:00, F: 13:00-14:00
or by appointment
Professor: Roberto Hoyle and Cynthia Taylor
email: roberto.hoyle AT oberlin edu
cynthia.taylor AT oberlin edu
Please include "cs151" in the subject.
Office: King 223c
Phone: x58424



(Will be updated throughout the semester)
1 Feb 04 Consider bookmarking Java for Python Programmers as a handy reference (PDF version) (Aug 28) Course Overview Lab 0 - Intro to lab/Eclipse
Feb 06   Introduction to Java Converting a Simple Program
Conditional Execution and User Input
for Loops
(Optional) HFJ Ch. 1
Feb 08 Variables and Functions Variable Scope
Functions / Static Methods
2 Feb 11   Introduction to Object Oriented Programming Primitives, Objects, and References
Working with Strings
Prelab 1

Lab 1 - Playing with Java
Feb 13 Last Day to Add/Drop Inheritance
Adding Methods to an Object
Feb 15   Generics
Introduction to Generics 1
Introduction to Generics 2: Declaration and Instantiation
3 Feb 18   Prelab 2

Lab 2 - More Java
Feb 20 Java Collections
(Read Zyante 1.4, 1.5)
Feb 22 Data Structure: Array Lists, Iterators
(Read Zyante 2.1,2.2)
4 Feb 25   Data Structure: Stacks
Data Structure: Queues
(Read Zyante 2.3, 2.4)
Prelab 3

Lab 3 - MyArrayList
Feb 27 Debugging
Mar 01 RJH Travelling
Guest lecturer TBA
No Class Today
5 Mar 04   Algorithm Analysis
  • Big-Oh Notation
  • Algorithm Growth
  • Classes of algorithms

(Read Zyante 3.1-3.3)
Prelab 4

Lab 4 - Maze Solver
Mar 06 Algorithm Analysis
  • Big-Oh Notation
  • Algorithm Growth
  • Classes of algorithms

(Read Zyante 3.4-3.6)
Mar 08 Data Structure: Linked Lists
(Read Zyante 4.1-4.12)
6 Mar 11   Recursion
  • Divide and Conquer
  • Recursive backtracking
  • Dynamic programming
(Read Zyante 5.1-5.2)
Prelab 5

Lab 5 - LinkedLists and Runtime
Mar 13 Recursion
  • Divide and Conquer
  • Recursive backtracking
  • Dynamic programming
(Read Zyante 5.3)
Mar 15 Data Structure: Trees
  • General
  • BST
(Read Zyante 6.1-6.5)
7 Mar 18   Data Structure: Trees
  • General
  • BST
(Read Zyante 6.6-6.10)
No lab this week, but Prelab 6 is due on Monday, March 18th
Mar 20 Review for exam
Mar 22 Midterm Exam [topics]
  Mar 25 Spring Break (Mar 23-31)
Mar 27
Mar 29
8 Apr 01   Data Structure: Balanced Trees
  • AVL
(Read Zyante 7.1-7.4)
Prelab 6

Lab 6 - Binary Tree Methods
Apr 03 Data Structure: Balanced Trees
  • AVL
  • Red-Black
  • 2-3-4 Trees
(Read Zyante 7.5-7.8)
Apr 05 Data Structure: Maps and Sets
(Read Zyante 8.1-8.3)
9 Apr 08 Last Day for P/NP, CR/NE,
  or Withdraw
Data Structure: Maps and Sets
Data Structure: Priority Queues
  • Heaps
  • Array based heaps
  • Heapsort

(Read Zyante 9.1-9.2)
Prelab 7

Lab 7 - Web Page Index
(Search Engine Part 1)
Apr 10   Data Structure: Maps and Sets
Data Structure: Priority Queues
  • Heaps
  • Array based heaps
  • Heapsort

(Read Zyante 9.3-9.4)
Apr 12 Data Structure: Hashtables
(Read Zyante 10.1-10.3)
10 Apr 15   Data Structure: Hashtables
(Read Zyante 10.4-10.6)
Prelab 8

Lab 8 - Process Queries(Search Engine Part 2)
Apr 17 Data Structure: Hashtables
(Read Zyante 10.7-10.8)
Apr 19 Data Structure: Tries
11 Apr 22   Data Structure: Graphs
  • Terminology
  • Representation
    • Edge List
    • Adjacency Matrix
    • Adjacency List

(Read Zyante 11.1-11.2)
Prelab 9

Lab 9 - Million Monkeys
Apr 24 Data Structure: Graphs
  • Terminology
  • Representation
    • Edge List
    • Adjacency Matrix
    • Adjacency List

(Read Zyante 11.3-11.4 )
Apr 26 Data Structure: Graphs
  • Shortest Path - Unweighted BFS

(Read Zyante 11.5-11.6)
12 Apr 29   Data Structure: Graphs
  • Shortest Path - Positive Weighted Paths (Dijkstra's Alg.)
  • Shortest Path - Negative Weighted Paths (Bellman-Ford Alg.)
  • Topological Sorting

(Read Zyante 11.7-11.9)
Prelab 10

Lab 10 - Boggle
May 01 Data Structure: Graphs
  • Shortest Path - Positive Weighted Paths (Dijkstra's Alg.)
  • Shortest Path - Negative Weighted Paths (Bellman-Ford Alg.)
  • Topological Sorting

(Read Zyante 11.10-11.13)
May 03 Algorithm: Insertion and Selection Sort
Algorithm: Linear & Binary Search
(Read Zyante 12.1-12.3, 13.1 - 13.2)
13 May 06 RJH Travelling
Guest lecturer TBA
Algorithm: Merge sort
Algorithm: Lower bound of search
(Read Zyante 14.1)
Prelab 11

Lab 11 - Kevin Bacon Game
May 08 More Sorting Algorithms
  • Bubble
  • Shell
  • Quick
Lower bounds of sorting
(Read Zyante 14.2-14.4)
May 10   Review and class wrapup

Course Description

From the Oberlin catalog course description:

This course builds upon the principles introduced in CSCI 150 and provides a general background for further study in Computer Science. The course will cover object-oriented programming concepts; the design and implementation of data structures (linked lists, stacks, queues, trees, heaps, hash tables, and graphs) and related algorithmic techniques (searching, sorting, recursion); and algorithm analysis. Students will be expected to complete a number of programming projects illustrating the concepts presented.

Goals and course objectives

My goals and objectives for students taking this course are as follows:

  1. Understand Big-O measurements and why it is of great importance to data structures and algorithms
  2. Study common algorithms used in computer science
    • Sorting: Bubble, insertion, shell, merge, quick, heap, radix
    • Searching/Selection: Linear, binary, quick
  3. Become skilled in common data structures (lists, stacks, queues, trees, heaps, hashtables)
    • Be able to create any of these from scratch -- structure and operations
    • Know the running times for the most common operations
    • Be able to reason about which structure is most appropriate for a given task
  4. Become fluent in Java programming including
    • Design and creation of interworking classes
    • Proper use of visibility modifiers
    • Creation and handling of exceptions
    • Regular use of Javadoc
  5. Gain experience using various tools in the Java/Linux environment
  6. Develop the habits of proper coding and thorough testing


We are using an interactive zybook this semester. You can buy the book online, or buy a code for it at the book store. To get the book:

  1. Sign in or create an account at
  2. Enter zyBook code: OBERLINCSCI151Spring2019
  3. Subscribe


Course grades will be calculated based on the following distribution:

The distribution might be adjusted based on the progression of the course.

Programming projects will generally consist of two major components:

  1. An underlying data structure implementation
  2. An application of this data structure
The actual breakdown of points will depend on the individual project, but the plurality of points will be for the data structure implementation. Projects will also be graded on style, documentation, and test cases.

If a portion of your program is not working correctly, please clearly indicate it in the comments at the beginning of the file and in the methods that are not working. Problems that I discover are graded more severely than those you discover.

Programming assignments will be graded on both correctness as well as programming style. Good programming style includes the following:

More information on Java style can be found on Sun's Code Conventions web page. There is also an open source tool checkstyle that can be used to check the style used.

Course Policy


Regular class and lab attendance and participation is expected. Please talk to me if regular class attendance is going to be a problem.

Homework Assignments

There will be a number of assignments made in this class. I expect every student to attempt each assignment and turn in the results. You are encouraged to complete every assignment as this is one of the most effective ways to learn the material.

If you know that for some reason you will not be able to submit the assignment before the deadline, you should contact me in advance of the deadline. Extensions are only granted in exceptional circumstances, but need to be done in advance.

Late submissions of lab assignments will be penalized up to 50% per day after the deadline. No late prelabs will be accepted. You will be allowed 1 late day in each half of the semester and 1 late day that can be used whenever (total of 4). You must include the fact that you are using one of your late days in the README document for an assignment.

Accommodations for students with disabilities

If you have a disability that might impact your performance in this course, or requires special accommodation, please contact me as soon as possible so that appropriate arrangements can be made. Support is available through Student Academic Success Programs. You will need to contact them to get your disability documented before accommodations can be made.

Plagiarism and Academic Dishonesty

I have very low tolerance for academic dishonesty, and will vigorously pursue available remedies for any incidents. All work in this class is to be performed according to the Oberlin Honor Code. Specifically I expect that:

  1. Quizzes and exams will be closed book, closed notes, and no communication between students. This includes discussing the same to students who are taking a quiz/exam at another time.
  2. Discussion of assignments is expected and encouraged, however all work and code on assignments should be your own without outside assistance.
  3. Sources should be cited including the textbook and other web sites when you use them in your work.
  4. You are not permitted to share your source code with other students, including future ones.
  5. You are not permitted to use other students solutions as your own (even those from a prior semester), nor answer keys, nor instructor versions.

Illustrative examples:

  1. Confirming that we had and exam is OK, telling another student in the class who has not taken it that it was easy/hard, what topics, etc. is NOT OK.
  2. On a project or homework, discussing what needs to be done and how it can be done is OK, having a student (other than a TA) go over your code is NOT OK, discussing what might be wrong and how to tell is OK (and encouraged).
  3. Other than your partner on a given assignment, it is NOT OK to give a student a copy of your code or for them to give you a copy of theirs. As a rule of thumb when discussing the assignments, you should not be writing finished solutions out, and you should be able to independently recreate the material on your own.
  4. On an assignment, you base your design off of the textbook's example. This is OK if you cite the source in the code. You don't need to have it be part of the Javadoc. E.g.,
    /* based on insertion sort from Weiss 3rd Ed, p. 306 */

All assignments must include the following signed statement:

"I have adhered to the Honor Code in this assignment."

Electronic submissions should include the honor statement in either the README file or header comments and must include your name.

Grader and Tutors

Contact me if you are interested in a Student Academic Services approved tutor.

The CSMC might hold walk-in tutoring sessions as well.

The CS department will be hiring a couple of students to work as lab helpers. They will be in the upstairs lab during the hours posted below.

The most up-to-date list can be found here.

VI PoweredLast Modified: January 28, 2016 - Roberto Hoyle, based on material from Benjamin Kuperman

Valid HTML 4.01 Strict Valid CSS!