Abstract Data Types: Specifications, Implementations, and Applications
