Java Software Structures: Designing and Using Data Structures (4th Edition)