Skip to content

Course Info

Basic Information

  • Class Meeting:
    • Lecture Mondays & Wednesdays, 1:25pm-2:40pm in Griffith Theater.
    • Discussion Fridays at varying times and places. See sections and facilitators here.
    • Helper hours throughout the week. See more info here.
  • Instructors: Alex Steiger
  • Teaching Associate: Violet Pang
  • Course Staff: See whole the team here!


In this course, you will learn how to analyze, use, and design data structures and algorithms in an object-oriented language (Java) to solve computational problems. Emphasis on abstraction including interfaces and abstract data types for lists, trees, sets, tables/maps, and graphs. Implementation and evaluation of programming techniques including recursion. Intuitive and rigorous analysis of algorithms.

Course Goals

At the end of the course, students should be able to:

  • Given a problem statement & a real data source, design, develop, debug, and test a Java program that uses appropriate standard libraries to efficiently solve the problem.
  • Write programs that effectively implement and use data structures such as: arrays, maps, linked lists, stacks, queues, trees, and graphs.
  • Evaluate the time and space complexity of iterative and recursively-defined algorithms using empirical and mathematical analysis.


You should have introductory programming experience at the level of CompSci 101, Engineering 103L, or equivalent. Prior experience specifically with the Java programming language is helpful but not necessary.