ADTs, Data Structures, and Problem Solving with C++