A lovely book that starts off with a history of algorithms and gently leads you into the heart of the book.
It describes in detail arrays and linked lists and the operations you can do on them, e.g. insertion, searching, etc. It then follows with different ADTs from stacks and queues through to maps and hash tables, at each step describing the concept of the ADT and its applications using code, diagrams and examples along the way.
As this is Java all the examples are in Java but anybody could easily lift the examples and re-write them in C++ or any other language.
I will use this book a lot in the next few months on a Java project I'm just starting.