Algorithms and Abstract Data Types