A book well worth considering as the set book for a second level course on data structures
The interesting approach taken in this book is to separate the specification and implementation of data structures. The idea being that students would use data structures in simple applications to gain an understanding of the operations required (and hence be able to specify the interface) and the efficiency implications. After this implementation details would be studied to see how the specification could be met.
The book is in five parts. Part one provides the Java basics required by the rest of the book; this would be suitable for readers with experience of an OO language and could be skipped by those with Java experience. Part two is an introduction to algorithms (searching, sorting, recursion, etc.) and data structures (stacks, queues, trees, hash tables, etc.) As well as analysing basic operations and specifying interfaces theoretical underpinning is presented. Part three presents applications using the algorithms and data structures from part two, e.g. word searches, compiler symbol checker, data compression and cross referencing, simulation, graphs, etc. Part four implements the data structures (in some cases only descriptions of algorithms are given with the implementation left as programming projects). Part five discusses advanced topics; the splay tree, priority queued and the disjoint set data structure. Throughout mathematical analyses are presented (some knowledge of discrete maths is necessary); the author states that these may be skipped and only the results studied if mathematical background is missing.
A book well worth considering as the set book for a second level course on data structures (following a first level course on Java programming). Code is available from the associated web site. Recommended!