Computer Engineering student with Holes in my knowledge (i want to improve) I'm a computer engineering student, I definitely have my strengths and weaknesses like any other student. And, I would like to improve upon areas that I'm either struggling in or completely missed in my fundamental intro courses.

this year i realized that there are few gaps in my knowledge specifically when it comes to programming. I understand most concepts, but sometimes i notice that i can't implement some concepts into code on my own.

This is due to gaps in my knowledge. There were couple times when teachers in my intro programming classes didn't have time to cover all the fundamental materials  so they skipped content. I didn't realize how big of a problem this is, until now that i'm in higher classes.

I'm still doing fine, but i'm scared this will grow into a bigger problem. I frankly have so much homework and studies and i can't dedicate time to go and start from zero again, specially that i know most things but missed on few important concepts. The problem is, i'm not exactly sure what all the concepts that i missed on are.

How can i fill the gaps in my knowledge in timely and efficient way? please help me. I would like to take your advice, and study those old content during winter break. 

I learn better by practicing problems and reading books, and i don't learn well from coding websites. Are there any work books that i can buy and practice with, preferably workbooks that cover solutions so i can compare my answers.

In particular, I have troubles converting algorithms from the textbook to source code in C++ and Java. Sometimes I struggle in implementing data structures such as queues/and stacks into C/C++ or java. I understand iterative programming, and i need to improve my understanding of recursive and dynamic programming techniques.
The obvious answer is to get a good textbook on Java data structures. Some are better than others and a few will mislead you. I find John Lewis to be trustworthy (and inexpensive as well).

What you are probably missing is the notion of encapsulation of things in classes and specification by interfaces, both essential to Java and specifically to your quest on algorithms. Some understanding of generics will also help you progress, but that is secondary to encapsulation and the idea of separating interface from implementation. 

There are more advanced books on Algorithms, but the grounding, first, in building data structures and reaching the point where you can understand the java.util library is your current optimal path. 

I would suggest using Java first, rather than C++ as it has fewer traps for the unwary. Java is built at a somewhat more abstract level than C++ and so provides a better way to think about higher level concepts.