Data Structures and Abstractions with Java 3rd Edition by Frank M. Carrano