Stanford CS106B Assignment 2 Solution (ADT)