Not sure this is any help, really, but it may be somewhat encouraging.
I was in the same boat when I took Data Structures 4 years ago. I went through the class with enough knowledge to get by and get the B, at least, in the class even though I didn't understand a lot of it.
I did not understand templates, linked lists, 'this' pointers, and really didn't understand pointers in general that well either, which greatly hindered my ability. I miraculously did what was required on the homework and tests (although test scores were still low for everyone and my teacher wound up curving them) and finished with a B.
After that I went on to take other classes for a few years. I found that in these classes different concepts were taught separately that helped me understand them better. Algorithms taught more about sorting and Big O, Assembly taught more about what was going on 'under the hood' of the computer which helped me understand pointers, etc.
I realized the second to last semester of my fifth year that I pretty much knew all the concepts from Data Structures and I hadn't even spent any extra effort to learn them, at least not from the standpoint of going back and trying specifically to understand Data Structures, if that makes any sense.
Without any real effort I wound up writing a templated, linked-list stack and queue for a couple of homework assignments in Operating Systems and I understood them. It blew me away. I'm positive it will be the same for you. Give it time and focus on other classes and it will all click. It seemed to take forever for it all to click for me, but it did.
Hope that helps.