I created this blueprint for myself, then i thought, why not share with others? Maybe this will be useful to someone, so i started sharing work here.
Core Data Structures
Arrays & Strings: Contiguous blocks of memory. Crucial for understanding index manipulation, memory offsets, and manual buffer handling.
Pointers & Dynamic Arrays {std::vector**}:** Vital for managing heap memory directly, resizing buffers, and understanding how raw data flow under the hood.
Linked List (Singly & Doubly): Nodes containing data and memory addresses. Essential for mastering pointer manipulation, dynamic memory allocation, and breaking away from contiguous memory limits.
Stacks & Queses: Last-In-First-Out (LIFO) and First-In-First-Out (FIFO) structures. Essential for tracking execution contexts, implementing custom commands shells, and managing buffers or task loops.
Hash Tables/ Hash Maps {std::unordered_map}: Key-value stores powered by hashing functions. Critical for achieving O(1) average-time look-ups, frequency counting, and symbol table tracking.
Trees (Binary Trees & Binary Search Trees): Hierarchical nodes used for recursive data organization, directory structures, and fast searching.
Heaps/ Priority Queues: Complete binary trees where parent nodes outrank children. Essential for scheduling, greedy algorithms, and finding minimum/maximum elements efficiently.
Graphs (Directed/Undirected): Nodes connected by edges. Fundamental for modeling networks, state machines, dependency resolutions, and path finding.
Tries (Prefix Trees): Specialized trees optimized for prefix-based string searches, autocomplete, and lexical analysis.
Essential Algorithms
Asymptotic Analysis (Big-O Notation): Evaluating time and space complexity to understand how code scales under heavy input sizes.
Searching Algorithms: Linear search and Binary Search (critical for cutting search spaces down logarithmically).
Sorting Algorithms: Merge Sort, Quick Sort, and understanding comparison-based sorting efficiency (O(n \log n)).
Recursion & Backtracking: Breaking problems down into self-referential sub-problems and exploring state spaces systematically (used heavily in parsing and combinatorial search).
Two Pointers & Sliding Window: Array/string manipulation patterns used to optimize nested loop bottlenecks down to linear time.
Graph Traversals (BFS & DFS): Breadth-First Search and Depth-First Search for exploring network nodes, detecting cycles, or tracing paths.
Shortest Path Algorithms: Dijkstra’s Algorithm and Bellman-Ford for weighted graph navigation.
Greedy Algorithms & Dynamic Programming: Making locally optimal choices vs. breaking problems down into overlapping sub-problems with memoization to optimize multi-stage decisions.
Conclusion
I hope this was helpful for you. It was just simple a blueprint to start things out. Maybe i will explain these concepts one by one in simple way, or you can check out other resources — there is plenty of learning materials out there.
Keep going, even if it doesn’t make sense .
— x86owl medium-blog-post