Data Structures in Java by Simon Gray