## Complete Roadmap to Learn Data Structure and Algorithms

The very 1st step you have to do is, choose a programming language, either Java or C++ (or it’s up to you which language you want to learn).

## 🎯 Now, start learning the language 1st

Like…
📌 Basic Syntax
📌 Data Types
📌 Operators, Variables, functions
📌 Conditional Statement, loops
📌 And the most important OOP(Object-Oriented Programming)

if you choose java, learn about Collection frameworks or if you choose C++ then learn STL(Standard Template Library).
(Or you can skip this as of now).

Now, I can assume that you are a bit familiar with your preferred language.
Like if I say every language has their own unique features/ operations which make them different from others right?

So, my point is learn the language in such a way that in future you will not face any issues while implementing Data structure. your basic should be clear.

## LEARN THE BASICS

It’s essential to get a solid grasp of pointers, structures, classes, dynamic memory allocation, and recursion to build an exceptional foundation. Learn how to locate time and storage complexities in algorithms and how to recognise them.

## Arrays & Strings

An array is a group of identical items arranged in a linear structure and stored in contiguous memory. The size of an array is always predetermined.

You can find out about arrays’ inner workings, how data is organised in them, how memory is allocated to them, and everything else. After you have gotten a fundamental understanding of arrays, you can go on to learn about their operations, such as inserting, deleting, swapping, searching, and so on.

Every value (denoted as ‘Value’) has an index number. For example, index numbers for an array of length five go from 0 to 4. A string, which consists of characters, is a type of array. An array that ends with a special symbol, ‘\0’, distinguishes a string from a character array.

## Sorting algorithms.

Learn basic sorting algorithms that follow a NORMAL APPROACH such as selection sort, bubble sort, insertion sort etc.

## DIVIDE AND CONQUER (A)

A function calling itself, either directly or indirectly, is referred to as recursion. Recursion is a programming technique that is frequently employed in complex scenarios in which we break down a major problem into smaller issues.

Using recursion, you can build a solution to a problem by going through smaller sub-problems until you reach the solution. In this way, backtracking builds an overall solution by going through the sub-problems one by one until the solution is reached.

Sorting algorithms such as merge sort, quick sort, and others employ the divide and conquer strategy. Learn about this approach.

## Binary Search Applications

Binary Search is the next data structures subject. Binary Search is an algorithm that employs divide and conquer strategy to search. Binary searches compare the target item to the centre item of a set. Every time a comparison is performed, a new set is created by dividing the original set into halves.

You can find out everything you need to know about linked lists, including how they work, how data is stored, how memory is managed, and much more.

After learning the basics of linked lists, learn about the various operations we can do with them, including insertion, deletion, searching, traversing, reversing, and more. Additionally, learn about their uses. You can also learn about the different types of linked lists.

## STACKS AND QUEUES (DS)

Both Stack and Queue are linear data structures. Stacks function on the LIFO principle (Last In First Out), whereas queues function on the LILO principle (Last In Last Out).

A visual representation would better explain this. In a stack, inserting an element is referred to as ‘pushing,’ and deleting an element is referred to as ‘popping.’

An element may be enqueued or dequeued to a queue, with the former taking place at the back and the latter at the front. Enqueuing an element is the process of adding it to a queue, and dequeuing an element is the process of removing it.

These operations are referred to as ‘enqueuing’ and ‘dequeuing’ respectively. It is important to be familiar with the two types of problem in this area: implementation-based problems and application-based problems.

## TREES AND GRAPHS (DS)

We are now going to cover the most critical factor. You should know about binary trees, binary search trees, traversal methods, tree height, and all other operations. Learn about Depth-first search and Breadth-first search.

## GREEDY METHODOLOGY (A)

Greedy is an algorithmic paradigm. Almost 70 percent of algorithms under trees and graphs follow this methodology.

1.Dijkstra’s shortest path algorithm.

2.Prim’s and Kruskal’s Minimum Spanning Tree.

3.Dial’s Algorithm (Optimized Dijkstra for small range weights)

Greedy algorithms are crucial algorithms to learn. After learning, you can use this concept to solve problems in other data structures.

## DYNAMIC PROGRAMMING

This is certainly the hardest of all the algorithms to grasp, so spend more time on it. Learn the fundamental procedures and then move on to the specifics of these algorithms.

Algorithms

1.Traveling salesman problem

2.Coin change problem