**Complete Data Structure Tutorial for beginners and professionals. **The aim of this **Data Structure Tutorial** will be to make you familiar with some **important concepts of popular Data Structures and their Algorithms**.

This tutorial will help you to **develop a deep understanding of implementing several operations on data using C and C++**.

Now, let’s start with understanding the first and most important definition i.e. **Data Structure**.

## What is a Data Structure?

**A Data Structure can be understood as an explicit method of storing and organizing data in a computer’s memory in a way that it can be used efficiently**. Data means information and Structure means a set of rules that holds the data together.

In other words, if we tend to take a combination of data and match them into a structure such that we can define its relating rules, we’ve created a data structure.

**A Data Structure is a special format for organizing and storing data**.- A
**Data Structure is a combination of different elements**where each element is either a data type or another Data Structure. - It is a set of rules or relationships involving the combination of elements.
**Data structures can be nested**. We can make a data structure within other data structures.- Data Structures include
**arrays, linked lists, stacks, queues, trees, graphs, files,**and so on.

### Why do we need to study Data Structure?

**Data means information, and there are billions of information in every sector that is an essential resource that needs to be judiciously used and shared for the overall benefit of the technical institution and people in general**.

These clusters of information in the form of massive data are processed in different ways to serve different real-life purposes. **Any unorganized arrangement of these enormous data will lead to ambiguity and redundant of data which will cause data collision in the computer’s memory**. This will waste a lot of time too.

**Here comes the need to study and understand Data Structures which helps in an organized arrangement of data while keeping the data processing speed fast**.

**Data Structure is a method of storing data in a computer’s memory in an organized manner**.- Data Structure serves different purposes in a different application.
**Data Structures such as arrays, linked structures, hash tables are used in storing data and hence known as**.*storage data structures*- On the other hand,
**Data Structures such as stacks and queues are used to process the data and hence known as**.*process-oriented data structures*

We will now understand the real-world application of Data Structures.

### What are the applications of Data Structure?

As we discussed above, **Data Structures are used to store data in a particularly organized order to avoid any data collision and provides quick access to our desired data which saves our precious time**. Similarly, the applications of Data Structure to solve real words problems can be understood in the light of day to day tasks that we perform.

**Situation 1**: To demonstrate the use of **Sorting operation in Data Structure**.

If a library has **1000 books** of different genres. And we have to find a book of a **genre (say) historical fiction** which is **published in the year 2005**. We will go through all the 1000 books and then after a lot of hard work, we will find that book. This will waste a lot of our time. Here we can use one **Data Structure operation called Sorting**,

**that will sort the books according to their genres and year of publishing,**so that we can find the desired book easily in relatively less time.

**Situation 2**: To demonstrate the use of **Stack operation in Data Structure**.

Suppose that we have **a tube of Pringles chips**, where **the last chips stacked in the tube is the first one that we will be eating**. Similarly,

**the**. We use the same operation in

*first chips*in the stacked tube is the*last one*that we will be eating**Stacks**i.e.

**LIFO (Last In First Out)**. And in the same way, the concept of

**Stack operation works in Data Structure**.

Further, when handling data in an application, **we use different Data Structures**, such as:

**Binary Search Tree**– It is used in an application where constant entering and exiting of data happens.**Binary Trees**– It is used in router devices to store router-tables.**Heaps**– It is used in implementing priority queues which is used in scheduling processes in many operating systems.**B-Tree**– It is used often used in indexing massive records in databases to improve the rate of search.

As we know there are numerous programming languages, each of them supports several different Data Structures. **It enables a programmer to create a new Data Structure for an application**.

Now we will briefly discuss each of the mentioned terms in the above flowchart to get an idea of elements of * Data Structure*.

## Primitive Data Structure

**Primitive Data Structure includes the fundamental or basic data structure used in the program to perform mathematical and logical operations**.

- It includes
**data types such as integer, float, character, string, pointers**, and so on. - The
**data size of these data types varies**from one machine to the other. - And since these
**data types perform operations on data, hence we call it a data structure**.

## Non-Primitive Data Structure

**Non-Primitive Data Structure includes derived or user-defined data types. This category includes a more sophisticated distribution of data based on its use and requirement in a program**.

**It includes data structures such as Arrays, Lists, Files, Trees, Graphs**, and so on.- The
.*Non-Primitive Data Structure*is the derived form of*Primitive Data Structure* - It enables a user to distribute a group of homogenous or heterogeneous data items together.

### Linear Data Structure

**Linear Data Structure is the same as any other data structure except that its arrangement is in a linear form**. Liner data structure stores data in a non-hierarchical order where every element is linked with one successive element and one preceding element except the first and last element.

#### Array in Data Structure

**An array is a fixed-sized, structured, and sequential collection of elements of the same kind of data type that share a common name**. Since it has a structured form, it can be used in representing values that have a structure of some sort.

**One-Dimensional Array**

**Multi-Dimensional Array**

#### List in Data Structure

**A-List is a collection of the variable numbers representing data values**. Every list has two fields to store data and address of the successive element respectively.

#### Stack in Data Strcutre

**A Stack is a data structure that stores a set of data one upon another or in a piled form**. Data can be deleted and inserted in the stack using different implementations such as **LIFO (Last In First Out)**.

#### Queue in Data Structure

**A Queue is a non-primitive linear data structure similar to stack except that the data is stored in a linear form**. Data can be inserted and deleted in a Queue using **FIFO (First In First Out)** method.

## Non-Linear Data Structure

**Contrary to the Linear Data Structure, the Non-Linear Data Structure has a non-linear arrangement of data**. It does not obey the sequential distribution of data, which means that each element is connected with one or more elements in a branched form.

### Graph in Data Structure

**A graph is a non-linear data structure, which means each element in a graph is connected with one or more elements in a branched manner**. The functionality of the graph is the same as used in other places like maths and science.

### Tree in Data Structure

**Tree is a non-linear data structure similar to the graph except that each element is linked to other elements in a hierarchical manner**. The graph follows the concept of root and child in its data distribution.

# What is Abstract Data Type in Data Structure?

The Abstract Data Type or ADT is a bundle of declared data with the performed operations that is meaningful for a particular data type. Data can be encapsulated with the data operation and it can later be hidden from the user.

**ADT consists of a set of definition that helps a user to use the program functions while the implementation remains hidden**.- It only focuses on
a data type is capable to do while**what**it can perform a task is hidden from the user.**how**

## Abstract Data Type Operations

We can perform **some commonly used operations on ADT**, such as:

**Entering data**–**It creates memory space for data elements at compile-time or run-time by declaring a statement**.**Accessing data**–**It helps in accessing a particular data within a data structure**.**Modifying data**–**It enables a user to modify or update a data in a data structure**.**Deleting data**–**It deletes or destroys the memory space which was allocated to a particular data**.**Searching**–**It searches for a particular data item in a data structure**.**Sorting**–**It helps in the arrangement of all data items within a data structure in a particular order**.**Merging**–**It merges or combines two data items of a distinct sorted list into a single sorted list**.

**Important Note**:

**These operations are performed on ADT using certain algorithms of which only the operation and its parameters are available to the user application**.

## Abstract Data Type Implementation

The implementation on ADT list can be performed using two basic structures i.e. Array Implementations and Linked List Implementations.

### Array Implementations

**Array provides a sequential order of distribution of elements maintained by the order of array(indexes)**. Using an array, searching operations can be efficiently performed while addition and deletion operations can be complex and inefficient.

**Arrays are preferably used for a frequently changing list of data items**.**For non-linear lists, array implementation can become excessively large**as such lists may have several successors linked to each element.

### Linked List Implementations

Linked list implementations can be used to create linear or non-linear structures, wherein a linear linked list, each element has only zero or no successor while the non-linear linked list has zero or one or more successor.

**Linked lists are preferably used to easily insert and delete data**, unlike arrays.- But
**one limitation of using linked list implementation is that we cannot use binary search operation as elements are not physically sequenced**. - However sequential searches can be carried out easily.

In the next section of the tutorial, we will discuss the **Algorithms used in Data Structures** and the **Asymptotic Analysis** in detail.