I'm starting a university course in data structures and algorithms next semester, and I'm feeling pretty overwhelmed. The topics will include arrays, linked lists, stacks, queues, trees and graphs, symbol tables, priority queues, balanced trees, sorting algorithms, and complexity analysis. The course will probably use C++, since the prerequisite did too, and I expect it to be fairly theory-heavy. My instructors aren't known for providing many resources or releasing slides early, so I'd like to prepare on my own. Should I work through a textbook, practice programming problems, or follow some other study plan? I'm worried about falling behind and hurting my grades, so I'd appreciate advice on where to start and how to approach the material.
4 Answers
Get a solid textbook and work through it from the beginning rather than trying to collect dozens of resources. Implement each structure and algorithm in C++, then test it on small examples. Focus especially on understanding the trade-offs and time complexity, not just memorizing code.
The important skill is learning when to choose one structure or algorithm over another. For example, a set is useful when values must be unique, a map when you need key-value lookup, and a priority queue when you repeatedly need the highest- or lowest-priority item. Don’t treat one structure as the answer to every problem; compare memory use, ordering, lookup speed, and update costs.
Start solving problems early. Pick one topic at a time, try a problem yourself, and only look up the relevant technique after you get stuck. Practice with common exercises involving arrays, stacks, queues, trees, sorting, and maps. That process will make the concepts feel much less abstract.
You don’t need to master the entire syllabus before the semester starts. Learn the basics of C++ first, then study arrays and linked structures, followed by stacks and queues, trees, hash tables, graphs, sorting, and complexity analysis. A small daily routine—reading a section, implementing it, and solving a few related problems—will be more effective than cramming.
When practicing, try both a straightforward solution and a more efficient one. Seeing a slow approach struggle with larger input makes the reason for better algorithms much easier to understand.

It’s also normal for the material not to click immediately. Working on practical programming problems can give the structures a purpose and make it easier to understand why one solution is better than another.