Data Structures and Algorithms With Object-Oriented Design Patterns In C++ by Bruno R Preiss