Practical Data Structure and Algorithm Fundamentals Every Programmer Must Know
Tags: programming, career, productivity, computerscience
Published: 2022-04-17 06:16:25

---
canonical_url: https://tapajyoti-bose.medium.com/practical-data-structure-and-algorithm-fundamentals-every-programmer-must-know-3089b11b7f4e
---

Do you feel like programming problems **bully you**?

![bullying](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/il237w14cozy9jtn3y1s.gif)

Fret not my friend, this article will provide you a **comprehensive list of topics** you should know regardless you want to **crack an interview at a product-based company** or become a **freelancer who is paid based on the products you create**.

## Arrays

This is simply the **most used data structure in the world**, without the knowledge of **arrays**, programmers will definitely mock you.

![mock](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/thl7cr1xhlmnm5yju9on.gif)

For **Arrays** skills you should focus on are:

1. **Searching**: **Linear search** & **binary search** are absolutely essential to know.
2. **Sorting**: Learn a few **sorting algorithms** and the trade-off between them. You can start off with the easy ones like **bubble sort** and **selection sort**, but should definitely have the knowledge of **insertion sort**, **merge sort**, and **quicksort**.
3. **Multidimensional Arrays**: Don't restrict yourself only to 1D **arrays**, you can also use 2D **arrays**, popularly known as matrices, but you rarely go beyond 2D **arrays** (unless you are in the field of data science).

## Linked Lists

**Linked List** is not that useful if you are trying to get into practical programming, enabling people to safely skip it. But for people trying to get into **FANG** (**MANG**, **MIMANNG**, or anything else you want to call them) it is a mandatory skill.

Start off with **Single Linked List**, then move on to **Double Linked List**, and **Circular Linked List**.

You should also practice problems regarding traversals, intersecting **Linked Lists**, merging **Linked Lists**, and reversing **Linked Lists**.

Even though the use of **Linked List** is quite rare, one cool application of them is while [creating caches](https://github.com/ruppysuppy/Daily-Coding-Problem-Solutions/blob/master/Solutions/052.py)

## Stacks, Queues, and Deques

Occasionally they are also called **pseudo data structures**, as they don't require a strict ordering such as continuous blocks of memory in an **array** or the pointer structure of a **linked list**.

**Stacks**, **Queues**, and **Deques** can be implemented using both **arrays** and **linked lists**. The only mandate is following the **LIFO**, **FIFO**, and **Deque paradigms** (even though the **linked list** is more optimized for the implementation than **arrays**).

Having some practical experience with these **data structures** will suffice for most cases.

## Hash Maps and Hash Lists

**Hash Maps** are probably the most used data structure on the planet, after **arrays**. They are widely used for efficient searches. From **JavaScript Objects** to **Python dictionaries**, they are everywhere.

The use of **Hash Lists** isn't that common, but they too have niche applications. In most languages, they are known as **Sets**.

Knowledge of **hashing algorithms** is not required, to use them, but it does get you extra brownie points. For these too, you can get away with some basic hands-on knowledge.

With these, you have enough experience to call yourself a decent programmer... just don't get too cocky, _history doesn't treat cocky people nicely_.

![cocky](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqnv41ihq51jhjpnjsz1.gif)

Let's move on to other items on the list...

## Trees

**Trees** are quite useful **data structures**, especially while storing hierarchical data.

There are specific types of **trees**, that are commonly used:

1. **Binary Trees**: A **binary tree** is a tree in which each node has at most two children.
2. **Binary Search Trees**: A **binary search tree** is a **binary tree** in which all the nodes are arranged in such a way that the left subtree of a node only contains nodes with keys less than the node's key, and the right subtree contains nodes with keys greater than the node's key.
3. **Trie**: A **trie**, also known as **prefix tree**, is a tree data structure that is typically used to preprocess a set of strings.

For **trees**, you should learn the **traversals**, **searches**, and **node insertions**.

Knowledge of generic **trees** is rarely required, though if you are a web developer, it would be a great asset in your arsenal. It would help you understand how the **DOM** operates and even create complex nested **UI** programmatically, without hardcoding it.

![nested-ui](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f48xq1u5sgjp5t4dkxdx.jpg)

## Graphs

**Graphs** too are rarely used **data structures** for both interview and practical programming. They typically are used for **data analysis** and **visualization**.

Some advanced applications like **Map software** & **social media analysts** extensively use **graphs**.

**Traversals**, **searches**, and **shortest path** (especially **Dijkstra's algorithm**) are the most critical skills required in the domain of **Graphs**.

## Algorithms

Apart from the **Data Structures** specific **algorithms**, some crucial paradigms to get acquainted with are:

1. **Recursion**: **Recursion** is a method of solving a computational problem where the solution depends on solutions to tiny instances of the same problem.
2. **Greedy**: **Greedy** algorithm is an approach for solving a problem by selecting the best option available at the moment
3. **Dynamic Programming**: **Dynamic programming** is a technique that breaks the problems into sub-problems, and saves the result for future purposes so that we do not need to compute the result again.
4. **Backtracking**: A recursive technique to build a solution incrementally, one piece at a time, removing those solutions that fail to satisfy the constraints of the problem at any point in time.

## Wrapping Up

That's all folks! Want some resources to help you get started? Check out the following links:

1. **Akash Roy's Algorithms Repository**: https://github.com/theroyakash/algorithms.theroyakash.com
2. **Akash Roy's Algorithms Website**: https://algorithms.theroyakash.com/
3. **Daily Coding Problems Solutions**: https://github.com/ruppysuppy/Daily-Coding-Problem-Solutions

Finding **personal finance** too intimidating? Checkout my **Instagram** to become a [**Dollar Ninja**](https://www.instagram.com/the.dollar.ninja/)

# Thanks for reading

Need a **Top Rated Front-End Development Freelancer** to chop away your development woes? Contact me on [Upwork](https://www.upwork.com/o/profiles/users/~01c12e516ee1d35044/)

Want to see what I am working on? Check out my [Personal Website](https://tapajyoti-bose.vercel.app) and [GitHub](https://github.com/ruppysuppy)

Want to connect? Reach out to me on [LinkedIn](https://www.linkedin.com/in/tapajyoti-bose/)

I am a freelancer who will start off as a **Digital Nomad** in mid-2022. Want to catch the journey? Follow me on [Instagram](https://www.instagram.com/tapajyotib/)

Follow my blogs for **Weekly new Tidbits** on [Dev](https://dev.to/ruppysuppy)

**FAQ**

These are a few commonly asked questions I get. So, I hope this **FAQ** section solves your issues.

1. **I am a beginner, how should I learn Front-End Web Dev?**
   Look into the following articles:

    1. [Front End Development Roadmap](https://dev.to/ruppysuppy/front-end-developer-roadmap-zero-to-hero-4pkf)
    2. [Front End Project Ideas](https://dev.to/ruppysuppy/5-projects-to-master-front-end-development-57p)