Programming Data Structures and Algorithms