A good introductory book is the oldie goldie Wirth's
Algorithms + Data Structures = Programs[
^] (it uses
Pascal
, however is very well written).
You may also consider
Sedgewick's books (I have no direct knowledge of them).
Finally, the are (as already suggested by
OriginalGriff) the
Knuth's ones. They are excellent (in fact the are 'the references' form many other authors) but rather difficult.