Anda di halaman 1dari 26

Linear Data Structure:

In Linear Data structure, the elements will be in sequential order and traversal will
be in a linear manner

Example

Linked List, Array, Stack, Queue

For Example in case of

Array represent linear relationship by means of sequential memory

In case of stack, queue, Linked List by means of sequential order of elements

Non Linear Data Structure:

The elements will be connected in a non linear manner. It branches to more than
one node

Eg

Put tat highlighted part alone

Stack:

Stack is a linear Data Structure which follows last in first out manner. The element
inserted last will be deleted first. Using Stack we can perform 2 main operations,
push and POP
Inserting the element into the Stack is known as Push

Deleting the element from the stack is known as POP

Undo Function uses the Stack operation, the change done recently will be
deleted first

Eg Tiffin carriers,Function calls

The element inserted at last will be removed first

Girls Bangles

Put some example and explain for push and pop both

QUEUE:

Queue is a linear data structure which follows First in first out .the element inserted
first will be the element deleted first

Operations Performed with the help of Queue are enqueue and dequeue

Inserting the element is known as enqueue

Deleting the element is known as dequeue

Eg:
Printer Queue

The Document which get submitted first will be printed first

Put some example and explain for enqueue and dequeue both

LIST :

A list is a sequential data structure, i.e. a collection of items accessible one after another
beginning at the head and ending at the tail.

Operations:

Insert

Delete

Find (element) returns index

Find (kth element) returns value


Two type of List are,

Array & Linked List

Insertion & Deletion requires shifting the elments

Linked List:

The list can grow and shrink as needed


insert

delete

Train cars are linked in a specific order so that they may be loaded, unloaded, transferred,
dropped off, and picked up in the most efficient manner possible.

U can insert or delete the compartment whenever needed (in the middle also)

Doubly Linked Lists:


In Doubly Linked Lists each node has two links: one points to previous node and
one points to next node. The
previous link of first node in the list points to a Null and the next link of last node
points to Null.

Eg:

Browsers back and forward button refers doubly Linked Lists.


Circularly Linked Lists:
Last node in the list points to the first node of the list. Circular Linked list can be singly linked
list and doubly linked list

Eg:
Round Robin Time Sharing jobs

Single Circularly Linked List

Double Circularly Linked List

(Balancing Symbols

Postfix Expressions

Infix to Postfix Conversion)Prepare simple example


Trees:
Tree is a non linear data structure used to simulate the hierarchical
relationship with other nodes

EG

Directory Structure(Folder Structure)

Tell which is root, which is child

Nodes with no children are known as leaves;

Show leaves
the leaves in
the tree above are B, C, H, I, P, Q, K, L, M, and N.
Nodes with the same parent are siblings ;
thus K, L, and M are all siblings

For any node ni, the depth of ni is the length of the unique path from the root to ni. Thus, the root
is at depth 0.
The height of ni is the longest path from ni
to a leaf. Thus all leaves are at height 0. The height of a tree is equal to the height of the root. For
the tree in
Figure 4.2, E is at depth 1 and height 2; F
is at depth 1 and height 1; the height of the tree is 3. The depth of a tree is equal to the depth of
the deepest
leaf; this is always equal to the height of the tree.

Binary trees:
A binary tree is a tree in which no node can have more than two children

expression tree . The leaves of an expression tree are operands , such as


constants or variable names, and the other nodes contain operators . This particular tree happens
to be binary,
because all of the operations are binary, and although this is the simplest case, it is possible for
nodes to have
more than two children. It is also possible for a node to have only one child, as is the case with
the unary minus
operator

Constructing an Expression Tree(simple example prepare)


Insert,delete also

AVL Tree

An AVL (Adelson-Velskii and Landis) tree is a binary search tree with a


balance
condition.

The simplest idea is to require that the left


and right subtrees have the same height
Single Rotation
Left Rotation
If a tree becomes unbalanced, when a node is inserted into the right
subtree of the right subtree, then we perform a single left rotation

In our example, node A has become unbalanced as a node is inserted in the


right subtree of A's right subtree. We perform the left rotation by
making A the left-subtree of B.

Right Rotation
AVL tree may become unbalanced, if a node is inserted in the left subtree of
the left subtree. The tree then needs a right rotation.

As depicted, the unbalanced node becomes the right child of its left child by
performing a right rotation.

Double Rotation
Left-Right Rotation
Double rotations are slightly complex version of already explained versions
of rotations. To understand them better, we should take note of each action
performed while rotation. Let's first check how to perform Left-Right
rotation. A left-right rotation is a combination of left rotation followed by
right rotation.

State Action

A node has been inserted into the right subtree of the left
subtree. This makes C an unbalanced node. These
scenarios cause AVL tree to perform left-right rotation.

We first perform the left rotation on the left subtree of C.


This makes A, the left subtree of B.

Node C is still unbalanced, however now, it is because of


the left-subtree of the left-subtree.
We shall now right-rotate the tree, making B the new root
node of this subtree. C now becomes the right subtree of
its own left subtree.

The tree is now balanced.

Right-Left Rotation
The second type of double rotation is Right-Left Rotation. It is a
combination of right rotation followed by left rotation.

State Action

A node has been inserted into the left subtree of the right
subtree. This makes A, an unbalanced node with balance
factor 2.
First, we perform the right rotation along C node,
making C the right subtree of its own left subtree B.
Now, B becomes the right subtree of A.

Node A is still unbalanced because of the right subtree of


its right subtree and requires a left rotation.

A left rotation is performed by making B the new root node


of the subtree. A becomes the left subtree of its right
subtree B.

The tree is

Heap is a special case of balanced binary tree data structure where the
root-node key is compared with its children and arranged accordingly

A Binary Search Tree (BST) is a tree in which all the nodes follow the below-
mentioned properties
The left sub-tree of a node has a key less than or equal to its parent
node's key.

The right sub-tree of a node has a key greater than to its parent node's
key.

Thus, BST divides all its sub-trees into two segments; the left sub-tree and
the right sub-tree and can be defined as

left_subtree (keys) node (key) right_subtree (keys)


Linear search is a very simple search algorithm. In this type of search, a
sequential search is made over all items one by one. Every item is
checked and if a match is found then that particular item is returned,
otherwise the search continues till the end of the data collection.

Binary search is a fast search algorithm with run-time complexity of (log


n). This search algorithm works on the principle of divide and conquer. For
this algorithm to work properly, the data collection should be in the sorted
form.

Binary search looks for a particular item by comparing the middle most item
of the collection. If a match occurs, then the index of item is returned. If
the middle item is greater than the item, then the item is searched in the
sub-array to the left of the middle item. Otherwise, the item is searched for
in the sub-array to the right of the middle item. This process continues on
the sub-array as well until the size of the subarray reduces to zero.

Heap is a special case of balanced binary tree data structure where the
root-node key is compared with its children and arranged accordingly.
If has child node then

key() key()

As the value of parent is greater than that of child, this property


generates Max Heap. Based on this criteria, a heap can be of two types
For Input 35 33 42 10 14 19 27 44 26 31

Min-Heap Where the value of the root node is less than or equal to
either of its children.

Max-Heap Where the value of the root node is greater than or equal to
either of its children.

Both trees are constructed using the same input and order of arrival.

Structure Property

A heap is a binary tree that is completely filled, with the possible exception
of the bottom level, which is filled from left to right.

Heap-Order Property
The property that allows operations to be performed quickly is the heap-
order property.

Since we want to be able to find the minimum quickly, it makes sense that
the smallest element should be at the root. If we consider that any subtree
should also be a heap, then any node should be smaller than all of its
descendants.

Bubble sort is a simple sorting algorithm. This sorting algorithm is


comparison-based algorithm in which each pair of adjacent elements is
compared and the elements are swapped if they are not in order.
We take an unsorted array for our example. Bubble sort takes (n 2) time so
we're keeping it short and precise.

Bubble sort starts with very first two elements, comparing them to check
which one is greater.

In this case, value 33 is greater than 14, so it is already in sorted locations.


Next, we compare 33 with 27.

We find that 27 is smaller than 33 and these two values must be swapped.

The new array should look like this

Next we compare 33 and 35. We find that both are in already sorted
positions.
Then we move to the next two values, 35 and 10.

We know then that 10 is smaller 35. Hence they are not sorted.

We swap these values. We find that we have reached the end of the array.
After one iteration, the array should look like this

To be precise, we are now showing how an array should look like after each
iteration. After the second iteration, it should look like this

Notice that after each iteration, at least one value moves at the end.

And when there's no swap required, bubble sorts learns that an array is
completely sorted.

Now we should look into some practical aspects of bubble sort.

Insertion Sort
The array is searched sequentially and unsorted items are moved and
inserted into the sorted sub-list (in the same array).
We take an unsorted array for our example.

Insertion sort compares the first two elements.

It finds that both 14 and 33 are already in ascending order. For now, 14 is
in sorted sub-list.

Insertion sort moves ahead and compares 33 with 27.

And finds that 33 is not in the correct position.

It swaps 33 with 27. It also checks with all the elements of sorted sub-list.
Here we see that the sorted sub-list has only one element 14, and 27 is
greater than 14. Hence, the sorted sub-list remains sorted after swapping.

By now we have 14 and 27 in the sorted sub-list. Next, it compares 33 with


10.

These values are not in a sorted order.


So we swap them.

However, swapping makes 27 and 10 unsorted.

Hence, we swap them too.

Again we find 14 and 10 in an unsorted order.

We swap them again. By the end of third iteration, we have a sorted sub-list
of 4 items.

This process goes on until all the unsorted values are covered in a sorted
sub-list. Now we shall see some programming aspects of insertion sort.

Selection Sort
The smallest element is selected from the unsorted array and swapped with
the leftmost element, and that element becomes a part of the sorted array.
This process continues moving unsorted array boundary by one element to
the right.

This algorithm is not suitable for large data sets as its average and worst
case complexities are of (n2), where n is the number of items.
How Selection Sort Works?
Consider the following depicted array as an example.

For the first position in the sorted list, the whole list is scanned sequentially.
The first position where 14 is stored presently, we search the whole list and
find that 10 is the lowest value.

So we replace 14 with 10. After one iteration 10, which happens to be the
minimum value in the list, appears in the first position of the sorted list.

For the second position, where 33 is residing, we start scanning the rest of
the list in a linear manner.

We find that 14 is the second lowest value in the list and it should appear at
the second place. We swap these values.

After two iterations, two least values are positioned at the beginning in a
sorted manner.

The same process is applied to the rest of the items in the array.

Following is a pictorial depiction of the entire sorting process


Now, let us learn some programming aspects of selection sort.

Merge sort is a sorting technique based on divide and conquer technique.


With worst-case time complexity being (n log n), it is one of the most
respected algorithms.

Merge sort first divides the array into equal halves and then combines them
in a sorted manner.
How Merge Sort Works?
To understand merge sort, we take an unsorted array as the following

We know that merge sort first divides the whole array iteratively into equal
halves unless the atomic values are achieved. We see here that an array of
8 items is divided into two arrays of size 4.

This does not change the sequence of appearance of items in the original.
Now we divide these two arrays into halves.

We further divide these arrays and we achieve atomic value which can no
more be divided.

Now, we combine them in exactly the same manner as they were broken
down. Please note the color codes given to these lists.

We first compare the element for each list and then combine them into
another list in a sorted manner. We see that 14 and 33 are in sorted
positions. We compare 27 and 10 and in the target list of 2 values we put
10 first, followed by 27. We change the order of 19 and 35 whereas 42 and
44 are placed sequentially.
In the next iteration of the combining phase, we compare lists of two data
values, and merge them into a list of found data values placing all in a
sorted order.

After the final merging, the list should look like this

Now we should learn some programming aspects of merge sorting.

Shell sort is a highly efficient sorting algorithm and is based on


insertion sort algorithm. This algorithm avoids large shifts as in case of
insertion sort, if the smaller value is to the far right and has to be moved to
the far left.

This algorithm uses insertion sort on a widely spread elements, first to sort
them and then sorts the less widely spaced elements. This spacing is
termed as interval. This interval is calculated based on Knuth's formula as

Knuth's Formula
h=h*3+1

where
h is interval with initial value 1

This algorithm is quite efficient for medium-sized data sets as its average
and worst case complexity are of (n), where n is the number of items.

How Shell Sort Works?


Let us consider the following example to have an idea of how shell sort
works. We take the same array we have used in our previous examples. For
our example and ease of understanding, we take the interval of 4. Make a
virtual sub-list of all values located at the interval of 4 positions. Here these
values are {35, 14}, {33, 19}, {42, 27} and {10, 14}

We compare values in each sub-list and swap them (if necessary) in the
original array. After this step, the new array should look like this

Then, we take interval of 2 and this gap generates two sub-lists - {14, 27,
35, 42}, {19, 10, 33, 44}
We compare and swap the values, if required, in the original array. After
this step, the array should look like this

Finally, we sort the rest of the array using interval of value 1. Shell sort
uses insertion sort to sort the array.

Following is the step-by-step depiction


We see that it required only four swaps to sort the rest of the array.

Quick sort is a highly efficient sorting algorithm and is based on


partitioning of array of data into smaller arrays. A large array is partitioned
into two arrays one of which holds values smaller than the specified value,
say pivot, based on which the partition is made and another array holds
values greater than the pivot value.

Quick sort partitions an array and then calls itself recursively twice to sort
the two resulting subarrays. This algorithm is quite efficient for large-sized
data sets as its average and worst case complexity are of (nlogn),
where n is the number of items.

Partition in Quick Sort


Following animated representation explains how to find the pivot value in an
array.

The pivot value divides the list into two parts. And recursively, we find the
pivot for each sub-lists until all lists contains only one element.

How Heap Sort Works

Initially on receiving an unsorted list, the first step in heap sort is to create a Heap data
structure(Max-Heap or Min-Heap). Once heap is built, the first element of the Heap is either
largest or smallest(depending upon Max-Heap or Min-Heap), so we put the first element of
the heap in our array. Then we again make heap using the remaining elements, to again
pick the first element of the heap and put it into the array. We keep on doing the same
repeatedly untill we have the complete sorted list in our array.