CS62: Data Structures and Advanced Programming

Fall 2025 • Pomona College

Lecture: Mon/Weds 2:45-4:00pm • Edmunds 114

Lab: Weds 7:00-8:15pm or 8:30-9:45pm • Edmunds 229

Overview

This course couples work on program design, analysis, and verification with an introduction to the study of data structures that are important in the construction of sophisticated computer programs. Students are expected to program in the object-oriented programming language Java. Students will learn to design complex and reliable software engineering systems through writing code modules that are easy to read, debug, test, verify, analyze, and modify.

Students will learn to analyze programs using big-“O” notation to understand their runtimes, as well as apply affordance analysis, to understand the technical and the ethical trade-offs of using different algorithms and data structures to solve computational problems. This course focuses on the efficiency of writing programs (design) and running programs (runtime).

This course is a prerequisite for most upper level Computer Science courses.

Prerequisites: The formal prerequisite for this course is CS54 at Pomona. We also assume that all students enrolled are comfortable writing small to medium-sized programs (around 500 lines of code with several interacting classes) in either Java or Python. The knowledge assumed is generally equivalent to CS51[A/P] as offered at Pomona. Be aware that neither CS5 nor CS60 at HMC satisfy the prerequisites for this course. (This is the last semester that CS54 is a pre-req, starting in Spring 2026, CS62 may be taken directly after CS51 (only CS51, not CS51A or CS51P)).


This course is divided into three rough modules (each roughly corresponding to a checkpoint):

  • Java & Basic Data Structures (Weeks 1-5) Let’s transition over from Python to our object-oriented programming (OOP) language Java. We’ll learn the basics of syntax, review classes, and introduce new topics important in OOP design such as inheritance, static versus instance variables, and interfaces. We’ll learn that data structures are abstract and theoretically sound ways for holding and processing data, and we’ll see and analyze our first basic data structures: array lists, singly linked lists, doubly linked lists, stacks, and queues.

  • Sorting & Searching (Weeks 6-11) We’ll cover canonical algorithms that help with sorting data (selection sort, insertion sort, mergesort, quicksort, heapsort) in detail. We’ll talk about data structures for keeping data quickly searchable (namely, lots of different kinds of trees: binary search trees, 2-3 trees, red-black trees…). Along with trees, dictionaries and hash tables are good data structures for solving searching problems.

  • Graphs & Software Engineering (Weeks 12-16) Graphs, as a data structure, do so much for computer scientists. We’ll learn how they’re represented, and several algorithms for traversing them (breadth first versus depth first search), and traversing them efficiently, such as calculating the shortest path between two nodes in a graph. Your final project will use human-centered design methods to solve real world problems by identifying which data structures to use and applying them. Hopefully, by the end of this course, you can feel confident in tackling Leetcode problems! (And if you want to learn even more algorithms, take CS140.)

The course website will contain links to the lecture slides (posted before lecture). We will use Gradescope and Github Classroom for lab/assignment submission and grading. Please come prepared to lab by fully reading the lab’s README file before the lab session.

The assignments in this class are:

  • 10 labs
  • 10 weekly coding homeworks, released in lab and due 11:59pm the following Tuesday (some can be done in pairs)
  • 10 short quizzes (given at the start of lab)
  • 3 checkpoints
  • 1 final project (groups of 3-4)

Unlike CS51, the lab section of CS62 is not for starting your homework assignments. Labs are their own assignments that either apply theortical concepts learned in lecture, or teach general software engineering skills, and are to be completed during the evening lab session. If you finish the lab assignment early, you are welcome to stay and get started on your homework in an environment where the course staff are available to help.

In general, students should bring their laptop and something to write with to every class for the worksheets.

Schedule

Schedule subject to change (especially after checkpoint 1 and lab ordering) due to feedback and student needs.

Week Date Topic Due (Tues 11:59pm)
1A Aug 25 Intro & Java Basics

Slides

Worksheet

Code

Cheatsheet

Course survey (EOD)
1B Aug 27 Classes & Static keyword

Slides

Worksheet

Code

1L Aug 27 Set up

Slides

2A Sep 1 Labor Day: No class ⚒️
2B Sep 3 Encapsulation & Inheritance
2L Sep 3 Silver Dollar

Quiz 1

HW1: Beginner Problems
3A Sep 8 Arraylists, Algorithmic analysis
3B Sep 10 Interfaces, Generics
3L Sep 10 Git

Quiz 2

HW2: Flippycard
4A Sep 15 Linked Lists (pt 1)
4B Sep 17 Linked Lists (pt 2)
4L Sep 17 Debugger

Quiz 3

HW3.1: Darwin pt. 1
5A Sep 22 Stacks & Queues
5B Sep 24 Iterators & Comparators
5L Sep 24 Checkpoint 1 review

Quiz 4

HW3.2: Darwin pt. 2
6A Sep 29 Checkpoint 1
6B Oct 1 Selection & Insertion Sort [asynchronous, video]
6L Oct 1 Junit HW4: Calculator
7A Oct 6 Mergesort
7B Oct 8 Quicksort
7L Oct 8 Sorting

Quiz 5

HW5: Wordle
8A Oct 13 Fall Break: No class 🍁
8B Oct 15 Binary Trees & Heaps
8L Oct 15 Binary trees

Quiz 6

HW6: On Disk Sort
9A Oct 20 Heapsort & priority queues
9B Oct 22 Binary search trees
9L Oct 22 Coding interview practice

Quiz 7

HW7: Autocomplete
10A Oct 27 BTrees
10B Oct 29 LLRBs
10L Oct 29 Checkpoint 2 review

Quiz 8

HW8: Hex-A-Pawn
11A Nov 3 Checkpoint 2
11B Nov 5 Hashing, pt 1
11L Nov 5 Shell scripting; final project specs None!
12A Nov 10 Hashing, pt 2
12B Nov 12 Graphs, BFS/DFS
12L Nov 12 TBD

Quiz 9

HW9: Text generator
13A Nov 17 Shortest paths (Dijkstra's)
13B Nov 19 Minimum Spanning Trees (Prim's, Kruskal's)
13L Nov 19 Graphs; project check-in

Quiz 10

14A Nov 24 DAGs
14B Nov 26 Thanksgiving Break: No class 🦃 HW10: TBD
14L Nov 26 Thanksgiving Break: No class 🦃
15A Dec 1 Algorimthic design practice, wrap up
15B Dec 3 Checkpoint 3
15L Dec 3 Final project check-ins
Dec 12 Final project due (Fri 11:59pm)

Course Staff

Prof. Jingyi Li

they/them

firstname.lastname@pomona.edu

Office Hours

Mon/Wed 4-5pm, Tues 1:30-2:45pm • Edmunds 111

Fun fact

I’m taking viola lessons through the music department this semester.

Kellie Au

she/her

Mentor Hours

Mon 8-10pm

Fun fact

I like chewing ice.

Jack Chin

he/him

Mentor Hours

Tue 5-6pm

Fun fact

I’ve climbed Mt. Fuji.

Asya Lyubavina

she/her

Mentor Hours

Tue 3-5pm

Fun fact

One of my paintings was exhibited in the San Diego Museum of Art.

Nicholas McGeveran

he/him

Mentor Hours

Tue 6-8pm

Fun fact

I know every single country flag.

Francisco Morales Puente

he/him

Mentor Hours

Fri 3-4pm

Fun fact

I have over a hundred (first) cousins.

Dylan O'Connor

he/him

Mentor Hours

Thu 4-6pm

Fun fact

I write with my left hand but am right handed.

More from Prof. Li: This is my fifth semester at Pomona College! I’m happy to be teaching many familiar faces from CS51P last Fall. My role in this course is to help you learn data structures (and how to learn data structures), to help facilitate learning from and teaching your peers, and to emotionally and academically support you through the material.

Outside of the classroom, I do human-computer interaction research on various art related things in the Doodle Lab. Before moving to Claremont, I lived in the Bay Area for the past decade (I have a BS in EECS from UC Berkeley and a PhD in CS from Stanford).

My preferred method of contact is the course Slack channel. Slack is great for asking and answering questions: your classmates may have the same questions as you, you may have the answers to your classmates’ questions, and I can upvote and expand on student responses. I will be posting course announcements through Slack as well. Feel free to DM me for individual requests; I will try my best during the weekdays to respond within 24 hours.

Grading

  • 40% checkpoints (13.33% each)
  • 30% weekly homework assignments
  • 20% final project
  • 5% quizzes (lowest score dropped)
  • 5% labs

Completing (i.e., turning in) every assignment is required to pass the course. This course may be taken for a letter grade only. There might be a slight curve at the end of the semester to bump up grades or more cleanly distribute grades. The curve will never hurt you based off of your raw points percentage.

Quizzes are bucket graded to prevent grade hyperfixation: check plus (equivalent to a 100), check (equivalent to a 92), and check minus. You may only retake quizzes if you get a check minus.

Course Policies

  • All homework assignments are due by Tuesday 11:59pm on Gradescope. Homework assignments have an automatic 19 hour extension to 6:59pm Wednesday (i.e., before the first lab section). If you find yourself struggling to finish the last few parts of the assignment and too tired to focus, go to bed so you can take a fresh look Wednesday morning. If you need an additional extension due to extenuating circumstances (e.g., physical or mental health), please email or Slack the instructor explaining your circumstances before the assignment is due. Work turned in past 6:59pm Wednesday without prior instructor consent will receive 20% off each 24 hours it is past due.
  • Labs are strictly due before Thursday morning (i.e., Wednesday night) if you do not finish them during lab time.
  • I strongly believe in mastery based grading and second chances: maybe you had a bad day when you took an exam, which shouldn’t unfairly impact your grade. As such, students may redo their checkpoints for up to 50% of their points lost back within a week of receiving their checkpoint grade. Answer keys will be released after regrades are due. Students are also able to retake quizzes by showing up to the instructor’s office hours within a week of originally taking the quiz if they receive a check minus.
  • While lab attendance is required and lecture attendence is highly encouraged, students may have 3 excused absences throughout the semester as long as they inform the instructor prior to their absence. Exceptions may be made for, e.g., athletes during the season. It is your responsibility to review the posted slides, do the worksheet, and come to office/mentor hours for help to catch up on missed class work.
  • Students with disabilities should contact the Student Disability Resource Center (SDRC) to request accommodations, particularly around finding SDRC proctored times for the checkpoints. I am happy to have a conversation with you to help establish the best plan.
  • I expect everyone to be an active and engaged member during our class activities. I strive to create an inclusive classroom where every student feels comfortable and safe sharing their thoughts. If I believe you are not participating and learning to the best of your ability, I will send you a message (or please feel free to initiate a conversation with me) so we can brainstorm ways to reduce your barriers to participation.
  • All policies are flexible. If you are facing an extenuating circumstance, I am happy to listen and help however possible.

To be blunt, CS62 is a class that is a lot of work. Assignments can be extremely challenging (but rewarding), and labs are different from homework assignments. The first few weeks of learning Java Syntax can feel too fast paced to some students. Scaling up from writing CS51 sized programs (~100 lines of code) to our larger programs (500-1000 lines) can be intimidating, but the course staff are here to help! If you need support, please come to office/mentor hours or post on Slack. I truly believe that everyone can learn—and excel in—computer science, and that every student should be accomodated to learn at their own pace.

AI Policy: Students may use ChatGPT/Claude/other LLMs in the course under limited circumstances. First, every usage of generative AI needs to be properly cited and documented, i.e., students should provide a hyperlink to their chat session log in the header comments of their code. Second, students should treat LLMs as the metaphor of a TA. This means the following actions are allowed:

  • Asking to generate practice problems
  • Asking to explain high level concepts
  • Including “do not generate any Java code. Only explain the concepts.” in the prompt.

Students may not use LLMs for:

  • Solving homework problems by pasting in the instructions
  • Debugging their code by pasting in the code directly
  • Generating any code for assignments (please include a ‘do not generate code’ prompt if you are getting assignment help).

Appropriate response to a violation of the AI policy will be determined on a case-by-case basis with a meeting with the instructor.

Resources

This is no required textbook for the course. One online textbook that may be helpful is the CS61B Textbook from UC Berkeley which the course occassionaly draws from. Students may also read Algorithms, 4th edition; there are copies in the CS library.

To practice solving problems in Java, students may use CodingBat.

Calendar

  • 12:00 PM
  • 12:30 PM
  • 1:00 PM
  • 1:30 PM
  • 2:00 PM
  • 2:30 PM
  • 3:00 PM
  • 3:30 PM
  • 4:00 PM
  • 4:30 PM
  • 5:00 PM
  • 5:30 PM
  • 6:00 PM
  • 6:30 PM
  • 7:00 PM
  • 7:30 PM
  • 8:00 PM
  • 8:30 PM
  • 9:00 PM
  • 9:30 PM
  • Monday

    • Lecture
      2:45–4:00 PM
      Edmunds 114
    • Office Hours
      4:00–5:00 PM
      Edmunds 111
    • Mentor Hours
      8:00–10:00 PM
      Kellie
  • Tuesday

    • Office Hours
      1:30–2:45 PM
      Edmunds 111
    • Mentor Hours
      3:00–5:00 PM
      Asya
    • Mentor Hours
      5:00–6:00 PM
      Jack
    • Mentor Hours
      6:00–8:00 PM
      Nick
  • Wednesday

    • Lab
      7:00–8:15 PM
      Edmunds 229
    • Office Hours
      4:00–5:00 PM
      Edmunds 111
    • Lab
      8:30–9:45 PM
      Edmunds 229
    • Lecture
      2:45–4:00 PM
      Edmunds 114
  • Thursday

    • Mentor Hours
      4:00–6:00 PM
      Dylan
  • Friday

    • Mentor Hours
      3:00–4:00 PM
      Francisco

Credits

Thank you to Alexandra Papoutsaki (and the long lineage of other Pomona faculty who worked on CS62 before me) for most of the course material. Site theme based on Just the Class, a documentation theme for Jekyll.