Implement Core ADT from the SPJ book