## Overview

Data structures and algorithms are the building blocks of computer science. Data structures and algorithms play an important role throughout the computer software and hardware industry. It is important to implement solutions to problems that we try to solve using the correct algorithm and data structure to ensure improved performance, maintainability, and readability.

The importance of utilizing data structures increases with the complexity of the problem we try to solve. The industries involved in complex and time-sensitive data processing sectors, such as financial and stock trading, tend to pay extra careful attention to their complex algorithms. Therefore screen their potential candidates for their strong data structures and algorithms knowledge.

## What are Data Structures and Algorithms?

A data structure defines how data is arranged in the memory of a computer. Basic data structures include arrays, linked lists, stacks, binary trees, hash tables, etc. Algorithms manipulate the data stored in data structures to solve a problem. Algorithms may sort, search, insert or delete data stored in our data structures to achieve the desired result. So to solve a problem, we have to pick the most suitable data structure and apply the correct algorithm. Therefore, data structures and algorithms are closely associated.

## What are Data Structures and Algorithms used for?

Data structures are used in almost every software application. In google search, travel reservation systems, google maps are a few to mention. They all deal with a heavy volume of data with critical response times. Therefore, performance is a key factor.

## What are the basic data structures?

Listed below are some basic data structures with their advantages and disadvantages. Each of these data structures is discussed in detail in the relevant course tutorial.

Data Structure | Advantages | Disadvantages |
---|---|---|

Array | Fast inserts Fast access by index | Slow search Slow deletion Fixed size |

Sorted Array | Faster search than unsorted array | Slow insertion Slow deletion Fixed size |

Stack | Fast LIFO access | Slow random access |

Queue | Fast FIFO access | Slow random access |

Linked list | Fast inserts and deletes | Slow search |

Binary tree | Fast insertion and deletion | Complexity |

Hash table | Fast access by key Fast insertion | Inefficient Slow deletion and access (if key unknown) |

Heap | Fast insertion and deletion Fast access to largest item | Slow access to remaining items |

Graph | Simulates practical solutions | Slow and complex |

2-3-4 tree | Search, Insertion, Deletion | Complex |

Red-black tree | Search, Insertion, Deletion | Complex |

## What is Big O Notation?

**In computer science, Big O notation is the rough measurement of how efficient a computer algorithm is.**

An algorithm consists of a series of steps required to perform a task efficiently. An algorithm efficiency is calculated by the number of steps it takes to solve the problem and the growth of the run time based on input data length to the algorithm. This measurement varies on the required number of steps and the volume of data. The time complexity increases with the amount of data. That is a shorthand way to say how efficient a computer algorithm is. The Big O notation expresses the efficiency without needing to mention actual dimensions of data. It is similar to picking a shirt, size, small, medium, large, etc., instead of looking at shirt dimensions.