While Cat is right about prefering STL containers, and algorithms (although there are sometimes good reasons for using your own), I'd have to say your idea of converting old projects to C++ is a good way to learn.
I'd advise actually rewriting them though. That way you'll be able to start with the 'right' design to begin with.
For example, this is one way you might want to think about implementing the linked list (a lot different from a C implementation):
Code:
template<typename T>
class linked_list
{
public:
typedef T* iterator; // Your iterator.
// Constructor, accessors, etc.
private:
struct node
{
node *next_, *prev_;
T* data_;
};
node *begin_, *end_;
};
Which reminds me of something else. While OOP is one of the great features of C++, so are templates, for many reasons. Once your comfortable with the basics of them, you might want to look into template metaprogramming - using templates as compile-time programs, and such.
Cheers