Project 0 was focused on setup and review in a style vaguely reminiscent of CSE 143. The other assignments in this course will differ significantly in two ways:

  • You will be allowed to work and submit together with a partner. See the introductory page of this assignment for more details on partner logistics.
  • The instructions on the website will often be more vague for a number of reasons:
    • To encourage you to discuss with your group or with other students.
    • Because there is more code involved, and specifying everything on the website would be unwieldy. (Instead, we keep specific implementation details in documentation comments in the provided code.)


When discussing with students other than your partner or when using online resources, always cite your collaborations as comments in your code, and otherwise follow the collaboration policies for projects.

Learning Goals

  • Understand the difference between an ADT and a data structure.

    Many students find it easier to understand these concepts by exploring a working codebase, and in this assignment, we have one with multiple ADTs and data structures.

  • Practice debugging code using tests.

    Learning how to write and use tests to identify and fix flaws in a program will save us a lot of time in the future. Following the debugging cycle allows us to do so effectively and systematically.

    1. Develop a hypothesis based on what we know about the problem.
    2. Reproduce the issue in a minimal working example.
    3. Make productive changes based on the root cause discovered.
    4. If there are more issues, return to step 1.
  • Understand data structure invariants and their value in testing programs.

    Data structures can be difficult to test: they contain internal state that may not be revealed by simply calling the methods provided by their ADTs, which can make it difficult to determine whether there are issues hidden internally. Instead of relying only on values returned by the ADT‘s methods, it can sometimes be easier to check the validity of this state directly by determining whether it violates the data structure’s invariants.


  1. More Setup - Acquire the assignment and set up for working with partners.
  2. Introduction - Learn how CSE 373 assignments are organized.
  3. Programming - Complete the programming portion of the assignment.
  4. Experiments - Run some experiments and complete a brief write-up.