Just to clarify, when I talk about a toolbox, I don't mean developing a library of code. I just mean you should learn some standard data structures and algorithms and know what their strengths and weaknesses are. With that knowledge, you can pick an appropriate solution to problems that you run into.
The data structures and algorithms are not language specific. They are concepts you should understand. Some of the standard data structures have been put into the C++ Standard Template Library (and I'm sure also in some Java libraries), but you should understand how they work so you know their capabilities.
Some of the fundamentals you should focus on early:
+ Learn a variety of sorting algorithms - I like this page:
http://www.sorting-algorithms.com/. You can also look here:
http://en.wikipedia.org/wiki/Sorting_algorithm. If you need more detail about specific algorithms, google the algorithm name. When you see notation O(n) or some such, you can google "big o notation" if you are interested. It's important stuff, but may be beyond your level right now.
+ Implement some common data structures and learn what they do - you can do this in C, C++, Java or anything else for that matter. I would suggest:
- stack using a fixed array
- circular buffer queue
- linked list
- stack and queue using linked lists
- binary tree (extremely useful for searching)
When you have a good understanding of these things, you will have a solid foundation in programming. And you will then have a reasonable idea of what else you need to learn.