Practically speaking, I find that data structures require a solid understanding of pointers and memory.
For instance, you should be able to grok why the below linked list doesn't work in under a minute.
But, to understand why it doesn't work, you have to understand how memory is laid out in C and C++, and to understand intuitively the concept of a pointer.
Some people like pictures and drawing out pictures. Other people like to watch the MIT OpenCourseware - I recommend giving it at least a try.
class node
{
int data;
node* next;
node* addnode()
{
node newnode;
this->next = &newnode;
return &newnode;
}
};
This is an approximation of a (bugged) implementation of a linked list I wrote about 10 years ago when I was learning data structures.
And as a final note, practice and theory are the yin and yang of a quality programmer/developer/computer scientist. You can't be truly proficient without both.