SlideShare a Scribd company logo
1 of 97
Data Structures 
& 
Applications 
By: 
M V B REDDY 
GITAM UNIVERSITY ,BLR Saturday, August 30, 2014 1
Data Structure is the structural representation of logical 
relationships between elements of data. 
Data Structure = Organized Data + Operations 
Data Structure + Algorithm = Program 
Algorithm is a step-by-step finite sequence of instructions, to 
solve a well-defined computational problem. 
•Data Structure (In Memory) = Storage Structure 
•Data Structure (In Auxiliary Memory) = File Structure 
Complexity Analysis of Algorithm 
Time Complexity* Space Complexity** 
* Time depends on Algorithms, Languages, Compilers, CPU Speed etc. It is 
analyzed for best, average and worst case of input data. 
** Space needed by instruction space, data space and environ. Stack space. 
Amstrong Complexity (amortized) 
2
Data Structure 
Primitive DS Non-primitive DS 
Integer Float Character Pointer Arrays Lists Files 
Linear List Non-linear List 
Stacks Queues Graphs Trees 
Saturday, August 30, 2014 3
ARRAYS 
An array is a collection of homogeneous data elements described 
by a single name. Each element is referenced by a subscripted 
variable or value, called subscript or index enclosed in 
parenthesis. 
•If an element is referenced by a single subscript, then array is 
known as 1-D or single array (linear array). --- Array[N] 
•If two subscripts are required, the array is known as 2-D or 
matrix array. ---- Array[M][N] 
•An array referenced by two or more subscripts is known as 
multidimensional array. ----- Array[X][Y][Z] 
Sparse array is an application of arrays where nearly all the 
elements have same values (usually zeros) and this value is 
constant. 1-D sparse array is called sparse vector and 2-D sparse 
array is called sparse matrix. 
Saturday, August 30, 2014 4
LISTS 
A list is a ordered set consisting of a varying number of elements 
(or nodes) linked by means of pointers. Each node is divided into 
two parts: 
INFO LINK 
A list overcome the limitation of fixed size in an array. A list may 
be linear ( stack, Queue) or non-linear (Tree, Graph). 
NODE 
DATA LINK DATA LINK DATA LINK DATA LINK 
START 
Types of linked list (LL): 
1. Singly LL 2. Doubly LL 3. Circular LL 
Saturday, August 30, 2014 5
Types of linked lists 
1. Singly linked list 
Begins with a pointer to the first node 
Terminates with a null pointer 
Only traversed in one direction 
2. Circular, singly linked list (e.g., time sharing in OS, multiplayer game) 
Pointer in the last node points back to the first node 
3. Doubly linked list (e.g., applications need more deletions) 
Two “start pointers” – first element and last element 
Each node has a forward pointer and a backward pointer 
Allows traversals both forwards and backwards 
4. Circular, doubly linked list 
Forward pointer of the last node points to the first node and backward pointer of 
the first node points to the last node 
* Free storage, garbage collection, Dangling reference, reference counter, storage compaction 
Saturday, August 30, 2014 6
STACKS 
A stack is a non-primitive linear data structure (LIFO). It is an 
ordered collections of items where insertion and deletion take 
place at one end only called top of stack (TOS). 
Stack Operations: 
Push() Pop() Top() Size() IsEmpty() 
Stack Applications: 
•Page-visited history in a Web browser 
•Undo sequence in a text editor 
•Saving local variables when there is recursive function calls 
•Conversion of infix to postfix expression 
•Auxiliary data structure for algorithms 
•Component of other data structures 
Saturday, August 30, 2014 7
1 /* stack.c 
2 dynamic stack program */ 
3 #include <stdio.h> 
4 #include <stdlib.h> 
5 
6 struct stackNode { /* self-referential structure 
*7/ int data; 
8 struct stackNode *nextPtr; 
9 }; 
10 
11 typedef struct stackNode StackNode; 
12 typedef StackNode *StackNodePtr; 
13 
14 void push( StackNodePtr *, int ); 
15 int pop( StackNodePtr * ); 
16 int isEmpty( StackNodePtr ); 
17 void printStack( StackNodePtr ); 
18 void instructions( void ); 
19 
20 int main() 
21 { 
22 StackNodePtr stackPtr = NULL; /* points to 
s2t3ack itnotp c*h/oice, value; 
24 
25 instructions(); 
26 printf( "? " ); 
27 scanf( "%d", &choice ); 
28 
Outline 
1. Define struct 
1.1 Function definitions 
1.2 Initialize variables 
2. Input choice 
Saturday, August 30, 2014 8
29 while ( choice != 3 ) { 
30 
31 switch ( choice ) { 
32 case 1: /* push value onto stack */ 
33 printf( "Enter an integer: " ); 
34 scanf( "%d", &value ); 
35 push( &stackPtr, value ); 
36 printStack( stackPtr ); 
37 break; 
38 case 2: /* pop value off stack */ 
39 if ( !isEmpty( stackPtr ) ) 
40 printf( "The popped value is %d.n", 
41 pop( &stackPtr ) ); 
42 
43 printStack( stackPtr ); 
44 break; 
45 default: 
46 printf( "Invalid choice.nn" ); 
47 instructions(); 
48 break; 
49 } 
50 
51 printf( "? " ); 
52 scanf( "%d", &choice ); 
53 } 
54 
55 printf( "End of run.n" ); 
56 return 0; 
57 } 
58 
Outline 
2.1 switch statement 
Saturday, August 30, 2014 9
59 /* Print the instructions */ 
60 void instructions( void ) 
61 { 
62 printf( "Enter choice:n" 
63 "1 to push a value on the stackn" 
64 "2 to pop a value off the stackn" 
65 "3 to end programn" ); 
66 } 
67 
68 /* Insert a node at the stack top */ 
69 void push( StackNodePtr *topPtr, int info ) 
70 { 
71 StackNodePtr newPtr; 
72 
73 newPtr = malloc( sizeof( StackNode ) ); 
74 if ( newPtr != NULL ) { 
75 newPtr->data = info; 
76 newPtr->nextPtr = *topPtr; 
77 *topPtr = newPtr; 
78 } 
79 else 
80 printf( "%d not inserted. No memory 
8av1ailable.n", info ); 
82 } 
83 
Outline 
3. Function definitions 
Saturday, August 30, 2014 10
84 /* Remove a node from the stack top */ 
85 int pop( StackNodePtr *topPtr ) 
86 { 
87 StackNodePtr tempPtr; 
88 int popValue; 
89 
90 tempPtr = *topPtr; 
91 popValue = ( *topPtr )->data; 
92 *topPtr = ( *topPtr )->nextPtr; 
93 free( tempPtr ); 
94 return popValue; 
95 } 
96 
97 /* Print the stack */ 
98 void printStack( StackNodePtr currentPtr ) 
99 { 
100 if ( currentPtr == NULL ) 
101 printf( "The stack is empty.nn" ); 
102 else { 
103 printf( "The stack is:n" ); 
104 
105 while ( currentPtr != NULL ) { 
106 printf( "%d --> ", currentPtr->data ); 
107 currentPtr = currentPtr->nextPtr; 
108 } 
109 
110 printf( "NULLnn" ); 
111 } 
112 } 
113 
Outline 
3. Function definitions 
Saturday, August 30, 2014 11
114 /* Is the stack empty? */ 
115 int isEmpty( StackNodePtr topPtr ) 
116 { 
117 return topPtr == NULL; 
118 } 
Enter choice: 
1 to push a value on the stack 
2 to pop a value off the stack 
3 to end program 
? 1 
Enter an integer: 5 
The stack is: 
5 --> NULL 
? 1 
Enter an integer: 6 
The stack is: 
6 --> 5 --> NULL 
? 1 
Enter an integer: 4 
The stack is: 
4 --> 6 --> 5 --> NULL 
? 2 
The popped value is 4. 
The stack is: 
6 --> 5 --> NULL 
Outline 
3. Function definitions 
Program Output 
Saturday, August 30, 2014 12
? 2 
The popped value is 6. 
The stack is: 
5 --> NULL 
? 2 
The popped value is 5. 
The stack is empty. 
? 2 
The stack is empty. 
? 4 
Invalid choice. 
Enter choice: 
1 to push a value on the stack 
2 to pop a value off the stack 
3 to end program 
? 3 
End of run. 
Outline 
Program Output 
Saturday, August 30, 2014 13
Tower of Hanoi: Application of stack 
History from Kashi Vishwanath temple which contains a 
large room with three time-worn posts in it surrounded by 64 
golden disks. Brahmin priests, acting out the command of an 
ancient prophecy, have been moving these disks, in 
accordance with the immutable rules of the Brahma, since 
that time. The puzzle is therefore also known as the Tower of 
Brahma puzzle. According to the legend, when the last move 
of the puzzle will be completed, the world will end. 
If the legend were true, and if the priests were able to move 
disks at a rate of one per second, using the smallest number 
of moves, it would take them 264−1 seconds or roughly 585 
billion years or 18,446,744,073,709,551,615 turns to finish, 
or about 45 times the life span of the sun. 
Saturday, August 30, 2014 14
Tower of Hanoi: Application of stack 
Three pegs A, B, C are given. Peg A contains N disks with 
decreasing size. The objective is to move disks from A to C 
using B. 
Step 
2 
Step 
1 
Step 
3 
Tower(N, A, B, C) 
If N=1 
Tower(1, A, B, C) or A->C 
If N>1 
1. Tower(N-1, A, C, B) 
2. Tower(1, A, B, C) or A->C 
3. Tower(N-1, B, A, C) 
Saturday, August 30, 2014 15
STACKS - Excercise 
Describe the output of the following series of stack 
operations 
•Push(8) 
•Push(3) 
•Pop() 
•Push(2) 
•Push(5) 
•Pop() 
•Pop() 
•Push(9) 
•Push(1) 
3 
8 
5 
2 
8 
1 
9 
8 
Saturday, August 30, 2014 16
QUEUES 
A queue is a non-primitive linear data structure (FIFO). It is 
an ordered collections of items where insertion takes place 
at one end called rear and deletion takes place at other end 
called front. 
Queue Operations: 
Enqueue() Dequeue() Front() Size() IsEmpty() 
Queue Applications: 
Direct applications 
•Waiting lines 
•Access to shared resources (e.g., printer) 
•Multiprogramming 
Indirect applications 
•Auxiliary data structure for algorithms 
•Component of other data structures 
Saturday, August 30, 2014 17
1 /* queue.c 
2 Operating and maintaining a queue */ 
3 
4 #include <stdio.h> 
5 #include <stdlib.h> 
6 
7 struct queueNode { /* self-referential structure */ 
8 char data; 
9 struct queueNode *nextPtr; 
10 }; 
11 
12 typedef struct queueNode QueueNode; 
13 typedef QueueNode *QueueNodePtr; 
14 
15 /* function prototypes */ 
16 void printQueue( QueueNodePtr ); 
17 int isEmpty( QueueNodePtr ); 
18 char dequeue( QueueNodePtr *, QueueNodePtr * ); 
19 void enqueue( QueueNodePtr *, QueueNodePtr *, char ); 
20 void instructions( void ); 
21 
22 int main() 
23 { 
24 QueueNodePtr headPtr = NULL, tailPtr = NULL; 
25 int choice; 
26 char item; 
27 
28 instructions(); 
29 printf( "? " ); 
30 scanf( "%d", &choice ); 
Outline 
1. Define struct 
1.1 Function prototypes 
1.2 Initialize variables 
2. Input choice 
Saturday, August 30, 2014 18
31 
32 while ( choice != 3 ) { 
33 
34 switch( choice ) { 
35 
36 case 1: 
37 printf( "Enter a character: " ); 
38 scanf( "n%c", &item ); 
39 enqueue( &headPtr, &tailPtr, item ); 
40 printQueue( headPtr ); 
41 break; 
42 case 2: 
43 if ( !isEmpty( headPtr ) ) { 
44 item = dequeue( &headPtr, &tailPtr ); 
45 printf( "%c has been dequeued.n", item ); 
46 } 
47 
48 printQueue( headPtr ); 
49 break; 
50 
51 default: 
52 printf( "Invalid choice.nn" ); 
53 instructions(); 
54 break; 
55 } 
56 
57 printf( "? " ); 
58 scanf( "%d", &choice ); 
59 } 
60 
61 printf( "End of run.n" ); 
62 return 0; 
63 } 
64 
Outline 
2.1 Switch statement 
Saturday, August 30, 2014 19
65 void instructions( void ) 
66 { 
67 printf ( "Enter your choice:n" 
68 " 1 to add an item to the queuen" 
69 " 2 to remove an item from the queuen" 
70 " 3 to endn" ); 
71 } 
72 
73 void enqueue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr, 
74 char value ) 
75 { 
76 QueueNodePtr newPtr; 
77 
78 newPtr = malloc( sizeof( QueueNode ) ); 
79 
80 if ( newPtr != NULL ) { 
81 newPtr->data = value; 
82 newPtr->nextPtr = NULL; 
83 
84 if ( isEmpty( *headPtr ) ) 
85 *headPtr = newPtr; 
86 else 
87 ( *tailPtr )->nextPtr = newPtr; 
88 
89 *tailPtr = newPtr; 
90 } 
91 else 
92 printf( "%c not inserted. No memory available.n", 
93 value ); 
94 } 
95 
Outline 
3 function definitions 
Saturday, August 30, 2014 20
96 char dequeue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr 
)97 { 
98 char value; 
99 QueueNodePtr tempPtr; 
100 
101 value = ( *headPtr )->data; 
102 tempPtr = *headPtr; 
103 *headPtr = ( *headPtr )->nextPtr; 
104 
105 if ( *headPtr == NULL ) 
106 *tailPtr = NULL; 
107 
108 free( tempPtr ); 
109 return value; 
110 } 
111 
112 int isEmpty( QueueNodePtr headPtr ) 
113 { 
114 return headPtr == NULL; 
115 } 
116 
117 void printQueue( QueueNodePtr currentPtr ) 
118 { 
119 if ( currentPtr == NULL ) 
120 printf( "Queue is empty.nn" ); 
121 else { 
122 printf( "The queue is:n" ); 
Outline 
3 function definitions 
Saturday, August 30, 2014 21
123 
124 while ( currentPtr != NULL ) { 
125 printf( "%c --> ", currentPtr->data ); 
126 currentPtr = currentPtr->nextPtr; 
127 } 
128 
129 printf( "NULLnn" ); 
130 } 
131 } 
Enter your choice: 
1 to add an item to the queue 
2 to remove an item from the queue 
3 to end 
? 1 
Enter a character: A 
The queue is: 
A --> NULL 
? 1 
Enter a character: B 
The queue is: 
A --> B --> NULL 
? 1 
Enter a character: C 
The queue is: 
A --> B --> C --> NULL 
Outline 
3 function definitions 
Output 
Saturday, August 30, 2014 22
? 2 
A has been dequeued. 
The queue is: 
B --> C --> NULL 
? 2 
B has been dequeued. 
The queue is: 
C --> NULL 
? 2 
C has been dequeued. 
Queue is empty. 
? 2 
Queue is empty. 
? 4 
Invalid choice. 
Enter your choice: 
1 to add an item to the queue 
2 to remove an item from the queue 
3 to end 
? 3 
End of run. 
Outline 
Output 
Saturday, August 30, 2014 23
Types of Queues 
1. Circular Queue 
Elements are represented in circular fashion. 
Insertion is done at very first location if last location is full. 
Rear=(rear + 1) % Size Front=(Front +1) % Size 
2. Double Ended Queue (deque) 
Elements can be inserted or deleted from both ends. 
Input restricted deque-insertion at only one end 
Output restricted deque-deletion at only one end 
3. Priority Queue 
Each element is assigned with a priority 
An element with higher priority is processed first 
Two elements with same priority are processed in FIFO order 
Saturday, August 30, 2014 24
QUEUES - Excercise 
Describe the output of the following series of queue 
operations 
•enqueue(8) 
•enqueue(3) 
•dequeue() 
•enqueue(2) 
•enqueue(5) 
•dequeue() 
•dequeue() 
•enqueue(9) 
•enqueue(1) 
8 3 
3 2 5 
5 9 1 
S8a/3tu0r/d2a0y1, 4August 30, 2014 25
The Trees 
A tree is a hierarchical representation of a finite set of one or 
more data items such that: 
•There is a special node called the root of the tree. 
•Data items are partitioned into mutually exclusive subsets each of which 
is itself a sub tree. 
Trees 
2-way tree (binary tree) m-way tree 
Binary Search Balanced Binary Expression Height Balanced Weight Balanced 
Height Balanced Weight Balanced 
Saturday, August 30, 2014 26
Trees Data Structures 
• Tree 
– Nodes 
– Each node can have 0 or more children 
– A node can have at most one parent 
• Binary tree 
– Tree with 0–2 children per node 
Tree Binary Tree 
Saturday, August 30, 2014 27
Trees 
• Terminology 
– Root  no parent 
– Leaf  no child 
– Interior  non-leaf 
– Height  distance from root to leaf 
Root node 
Interior nodes Height 
Leaf nodes 
Saturday, August 30, 2014 28
The degree (shown in green color)of a tree is the maximum 
degree of node in a tree. 
Depth (shown in red color) of a tree is the maximum level of any 
node in a tree. 
B 
1 
2 2 2 
2 1 3 
E F 
3 3 3 3 3 3 
2 0 0 1 0 0 
K L 
A 
C 
G 
D 
H I J 
M 
Level 
1 
2 
3 
4 
3 
0 0 0 
4 4 4 
Saturday, August 30, 2014 29
Binary Trees 
A binary tree is a tree in which no node can have more than two 
child nodes (left and right child). 
2-tree or extended binary tree: Each node has either no children 
or two children. It is used to represent and compute any 
algebraic expression using binary operation. 
e.g. E = (a + b) / ((c - d) * e) 
/ 
+ * 
a b - e 
c d 
Fig. - expression tree 
Saturday, August 30, 2014 30
Samples of Trees 
A 
B 
A 
B 
Complete Binary Tree 
A 
B C 
F 
E G 
I 
D 
1 
2 
3 
H 
Skewed Binary Tree 
E 
C 
D 
4 
5 
Saturday, August 30, 2014 31
Tree Traversal 
1. Preorder Traversal (Root -> Left -> Right) 
2. In order Traversal (Left -> Root -> Right) 
3. Post order traversal (Left -> Right -> Root) 
In order traversal – prints the node values in ascending order 
• Traverse the left sub tree with an in order traversal 
• Process the value in the node (i.e., print the node value) 
• Traverse the right sub tree with an in order traversal 
Preorder traversal 
•Process the value in the node 
•Traverse the left sub tree with a preorder traversal 
•Traverse the right sub tree with a preorder traversal 
Post order traversal 
•Traverse the left sub tree with a post order traversal 
•Traverse the right sub tree with a post order traversal 
•Process the value in the node 
Saturday, August 30, 2014 32
preorder: A B C D E F G H I 
inorder: B C A E D G H F I 
A 
B, C D, E, F, G, H, I 
A 
B D, E, F, G, H, I 
C 
A 
B 
C 
D 
E F 
G I 
H 
Saturday, August 30, 2014 33
1 /* tree.c 
2 Create a binary tree and traverse it 
3 preorder, inorder, and postorder */ 
4 #include <stdio.h> 
5 #include <stdlib.h> 
6 #include <time.h> 
7 
8 struct treeNode { 
9 struct treeNode *leftPtr; 
10 int data; 
11 struct treeNode *rightPtr; 
12 }; 
13 
14 typedef struct treeNode TreeNode; 
15 typedef TreeNode *TreeNodePtr; 
16 
17 void insertNode( TreeNodePtr *, int ); 
18 void inOrder( TreeNodePtr ); 
19 void preOrder( TreeNodePtr ); 
20 void postOrder( TreeNodePtr ); 
21 
22 int main() 
23 { 
24 int i, item; 
25 TreeNodePtr rootPtr = NULL; 
26 
27 srand( time( NULL ) ); 
28 
Outline 
1. Define struct 
1.1 Function prototypes 
1.2 Initialize variables 
Saturday, August 30, 2014 34
Outline 
1.3 Insert random 
elements 
2. Function calls 
3. Function definitions 
29 /* insert random values between 1 and 15 in the tree */ 
30 printf( "The numbers being placed in the tree are:n" ); 
31 
32 for ( i = 1; i <= 10; i++ ) { 
33 item = rand() % 15; 
34 printf( "%3d", item ); 
35 insertNode( &rootPtr, item ); 
36 } 
37 
38 /* traverse the tree preOrder */ 
39 printf( "nnThe preOrder traversal is:n" ); 
40 preOrder( rootPtr ); 
41 
42 /* traverse the tree inOrder */ 
43 printf( "nnThe inOrder traversal is:n" ); 
44 inOrder( rootPtr ); 
45 
46 /* traverse the tree postOrder */ 
47 printf( "nnThe postOrder traversal is:n" ); 
48 postOrder( rootPtr ); 
49 
50 return 0; 
51 } 
52 
53 void insertNode( TreeNodePtr *treePtr, int value ) 
54 { 
55 if ( *treePtr == NULL ) { /* *treePtr is NULL */ 
56 *treePtr = malloc( sizeof( TreeNode ) ); 
57 
58 if ( *treePtr != NULL ) { 
59 ( *treePtr )->data = value; 
60 ( *treePtr )->leftPtr = NULL; 
61 ( *treePtr )->rightPtr = NULL; 
62 } 
Saturday, August 30, 2014 35
Outline 
3. Function definitions 
63 else 
64 printf( "%d not inserted. No memory available.n", 
65 value ); 
66 } 
67 else 
68 if ( value < ( *treePtr )->data ) 
69 insertNode( &( ( *treePtr )->leftPtr ), value ); 
70 else if ( value > ( *treePtr )->data ) 
71 insertNode( &( ( *treePtr )->rightPtr ), value ); 
72 else 
73 printf( "dup" ); 
74 } 
75 
76 void inOrder( TreeNodePtr treePtr ) 
77 { 
78 if ( treePtr != NULL ) { 
79 inOrder( treePtr->leftPtr ); 
80 printf( "%3d", treePtr->data ); 
81 inOrder( treePtr->rightPtr ); 
82 } 
83 } 
84 
85 void preOrder( TreeNodePtr treePtr ) 
86 { 
87 if ( treePtr != NULL ) { 
88 printf( "%3d", treePtr->data ); 
89 preOrder( treePtr->leftPtr ); 
90 preOrder( treePtr->rightPtr ); 
91 } 
92 } 
Saturday, August 30, 2014 36
Outline 
3. Function 
definitions 
Program Output 
93 
94 void postOrder( TreeNodePtr treePtr ) 
95 { 
96 if ( treePtr != NULL ) { 
97 postOrder( treePtr->leftPtr ); 
98 postOrder( treePtr->rightPtr ); 
99 printf( "%3d", treePtr->data ); 
100 } 
101 } 
The numbers being placed in the tree are: 
7 8 0 6 14 1 0dup 13 0dup 7dup 
The preOrder traversal is: 
7 0 6 1 8 14 13 
The inOrder traversal is: 
0 1 6 7 8 13 14 
The postOrder traversal is: 
1 6 0 13 14 8 7 
Saturday, August 30, 2014 37
Binary Search Trees 
• Key property 
– Value at node 
• Smaller values in left subtree 
• Larger values in right subtree 
– Example 
• X > Y 
• X < Z 
Y 
X 
Z 
Saturday, August 30, 2014 38
Binary Search Trees 
Binary search tree 
• Values in left sub tree less than parent 
• Values in right sub tree greater than parent 
• Applications: Facilitates duplicate elimination, 
generating Huffman codes, expression tree 
• Fast searches - for a balanced tree, maximum of log n 
comparisons 47 
25 77 
11 43 65 93 
7 17 31 44 68 
Saturday, August 30, 2014 39
Building expression tree: An Application 
a b c * + 
Step 1: Push a, b and c sub trees into stack. 
Step 2: When operator * is encountered, pop top two sub 
trees from stack and build tree as: 
* 
b c 
Step 3: Push the above sub tree onto stack. 
Step 4: When operator + is encountered, pop top two sub 
trees from stack and build the tree as: 
+ 
a * 
b c 
Saturday, August 30, 2014 40
Binary Search Trees 
• Examples 
30 
2 25 45 
Binary 
10 
search trees 
5 
10 
45 
2 25 30 
Not a binary 
search tree 
5 
5 
2 
10 
30 
25 
45 
Saturday, August 30, 2014 41
Binary Tree Implementation 
Class Node { 
int data; // Could be int, a class, etc 
Node *left, *right; // null if empty 
void insert ( int data ) { … } 
void delete ( int data ) { … } 
Node *find ( int data ) { … } 
… 
} 
Saturday, August 30, 2014 42
Iterative Search of Binary Tree 
Node *Find( Node *n, int key) { 
while (n != NULL) { 
if (n->data == key) // Found it 
return n; 
if (n->data > key) // In left subtree 
n = n->left; 
else // In right subtree 
n = n->right; 
} 
return null; 
} 
Node * n = Find( root, 5); 
Saturday, August 30, 2014 43
Recursive Search of Binary Tree 
Node *Find( Node *n, int key) { 
if (n == NULL) // Not found 
return( n ); 
else if (n->data == key) // Found it 
return( n ); 
else if (n->data > key) // In left subtree 
return Find( n->left, key ); 
else // In right subtree 
return Find( n->right, key ); 
} 
Node * n = Find( root, 5); 
Saturday, August 30, 2014 44
Example Binary Searches 
• Find ( root, 2 ) 
5 
10 
30 
root 
2 25 45 
5 
2 
10 
30 
25 
45 
10 > 2, left 
5 > 2, left 
2 = 2, found 
5 > 2, left 
2 = 2, found 
Saturday, August 30, 2014 45
Example Binary Searches 
• Find (root, 25 ) 
5 
10 
30 
2 25 45 
5 
2 
10 
30 
25 
45 
10 < 25, right 
30 > 25, left 
25 = 25, found 
5 < 25, right 
45 > 25, left 
30 > 25, left 
10 < 25, right 
25 = 25, found 
Saturday, August 30, 2014 46
Binary Search Tree – Insertion 
• Algorithm 
1. Perform search for value X 
2. Search will end at node Y (if X not in tree) 
3. If X < Y, insert new leaf X as new left subtree for Y 
4. If X > Y, insert new leaf X as new right subtree for 
Y 
• Observations 
– O( log(n) ) operation for balanced tree 
– Insertions may unbalance tree 
Saturday, August 30, 2014 47
Example Insertion 
• Insert ( 20 ) 
5 
10 
30 
2 25 45 
10 < 20, right 
30 > 20, left 
25 > 20, left 
Insert 20 on left 
20 
Saturday, August 30, 2014 48
Insert Node in Binary Search Tree 
40 
30 
5 
2 
30 
5 40 
2 35 80 
30 
5 40 
2 80 
Insert 80 Insert 35 
Saturday, August 30, 2014 49
Binary Search Tree – Deletion 
• Algorithm 
1. Perform search for value X 
2. If X is a leaf, delete X 
3. Else // must delete internal node 
a) Replace with largest value Y on left subtree 
OR smallest value Z on right subtree 
b) Delete replacement value (Y or Z) from subtree 
Observation 
– O( log(n) ) operation for balanced tree 
– Deletions may unbalance tree 
Saturday, August 30, 2014 50
Example Deletion (Leaf) 
• Delete ( 25 ) 
5 
10 
30 
2 25 45 
10 < 25, right 
30 > 25, left 
25 = 25, delete 
5 
10 
30 
2 45 
Saturday, August 30, 2014 51
Example Deletion (Internal Node) 
• Delete ( 10 ) 
5 
10 
30 
2 25 45 
5 
5 
30 
2 25 45 
2 
5 
30 
2 25 45 
Replacing 10 
with largest 
value in left 
subtree 
Replacing 5 
with largest 
value in left 
subtree 
Deleting leaf 
Saturday, August 30, 2014 52
Example Deletion (Internal Node) 
• Delete ( 10 ) 
5 
10 
30 
2 25 45 
5 
25 
30 
2 25 45 
5 
25 
30 
2 45 
Replacing 10 
with smallest 
value in right 
subtree 
Deleting leaf Resulting tree 
Saturday, August 30, 2014 53
Deletion for A Binary Search Tree 
40 
20 60 
non-leaf 
node 
10 30 50 70 
45 55 
52 
40 
20 55 
10 30 50 70 
45 52 
Before deleting 60 After deleting 60 
Saturday, August 30, 2014 54
Binary Search Properties 
• Time of search 
– Proportional to height of tree 
– Balanced binary tree 
• O( log(n) ) time 
– Degenerate tree 
• O( n ) time 
• Like searching linked list / unsorted array 
Saturday, August 30, 2014 55
AVL tree 
AVL trees are height-balanced binary search trees 
Balance factor of a node= 
height(left sub tree) - height(right sub tree) 
An AVL tree has balance factor calculated at every node 
For every node, heights of left and right sub tree can 
differ by no more than 1 
Store current heights in each node 
AVL property 
violated here 
Saturday, August 30, 2014 56
Rotations 
• When the tree structure changes (e.g., insertion or 
deletion), we need to transform the tree to restore the AVL 
tree property. 
• This is done using single rotations or double rotations. 
x 
e.g. Single Rotation 
y 
A 
B 
C 
y 
x 
A 
B C 
Before Rotation After Rotation 
Saturday, August 30, 2014 57
Rotations 
• Since an insertion/deletion involves 
adding/deleting a single node, this can only 
increase/decrease the height of some 
subtree by 1 
• Thus, if the AVL tree property is violated at 
a node x, it means that the heights of left(x) 
and right(x) differ by exactly 2. 
• Rotations will be applied to x to restore the 
AVL tree property. 
Saturday, August 30, 2014 58
Single rotation 
The new key is inserted in the subtree A. 
The AVL-property is violated at x 
height of left(x) is h+2 
height of right(x) is h. 
Saturday, August 30, 2014 59
Single rotation 
The new key is inserted in the subtree C. 
The AVL-property is violated at x. 
Single rotation takes O(1) time. 
Insertion takes O(log N) time. 
Saturday, August 30, 2014 60
5 
AVL Tree 
3 
1 4 
3 
1 4 
y 
A 
Insert 0.8 
8 
0.8 
5 
x 
8 
B 
Saturday, August 30, 2014 61 
C 
3 
5 
1 
0.8 
4 8 
After rotation
Double rotation 
The new key is inserted in the subtree B1 or B2. 
The AVL-property is violated at x. 
x-y-z forms a zig-zag shape 
also called left-right rotate 
Saturday, August 30, 2014 62
Double rotation 
The new key is inserted in the subtree B1 or B2. 
The AVL-property is violated at x. 
also called right-left rotate 
Saturday, August 30, 2014 63
5 
AVL Tree 
3 
1 4 
3 
y 
1 4 
A z 
3.5 
Insert 3.5 
8 
5 
x 
8 
4 
5 
1 
3 
B 
3.5 After Rotation 
C 
8 
Saturday, August 30, 2014 64
An Extended Example 
Insert 3,2,1,4,5,6,7, 16,15,14 
3 
Fig 1 
3 
2 
Fig 2 
3 
2 
1 
Fig 3 
Single rotation 
2 
1 3 
Fig 4 
2 
1 3 
4 
Fig 5 
2 
1 3 
Single rotation 
4 
5 
Fig 6 
Saturday, August 30, 2014 65
Insert 3,2,1,4,5,6,7, 16,15,14 
2 
1 4 
3 5 
2 
1 4 
Single rotation 
3 5 
Fig 8 
Fig 7 6 
4 
2 5 
1 3 6 
Fig 9 
4 
2 5 
Single rotation 
1 3 6 
Fig 10 7 
4 
2 6 
1 3 7 
5 Fig 11 
Saturday, August 30, 2014 66
4 
Insert 3,2,1,4,5,6,7, 16,15,14 
2 6 
1 3 7 
5 16 
Fig 12 
4 
2 6 
1 3 7 
Double rotation 
5 16 
15 
Fig 13 
4 
2 6 
1 3 15 5 
16 
Fig 14 7 
Saturday, August 30, 2014 67
4 
2 7 
1 3 15 6 
5 
14 16 
Fig 16 
Insert 3,2,1,4,5,6,7, 16,15,14 
4 
2 6 
1 3 15 5 
Double rotation 
16 
7 
14 
Fig 15 
Saturday, August 30, 2014 68
AVL Insertion: Outside Case 
j 
Consider a valid 
AVL subtree 
k 
h 
X Y 
Z 
h 
h 
Saturday, August 30, 2014 69
AVL Insertion: Outside Case 
j 
k 
X 
h+1 h 
Y 
Z 
Inserting into X 
destroys the AVL 
property at node j 
h 
Saturday, August 30, 2014 70
AVL Insertion: Outside Case 
j 
k 
X 
h+1 h 
Y 
Do a “right rotation” 
Z 
h 
Saturday, August 30, 2014 71
Single right rotation 
j 
k 
X 
h+1 h 
Y 
Do a “right rotation” 
Z 
h 
Saturday, August 30, 2014 72
Outside Case Completed 
j 
k 
“Right rotation” done! 
(“Left rotation” is mirror 
symmetric) 
h+1 
h 
X Y Z 
h 
AVL property has been restored! 
Saturday, August 30, 2014 73
AVL Insertion: Inside Case 
j 
Consider a valid 
AVL subtree 
k 
h h 
X Y 
Z 
h 
Saturday, August 30, 2014 74
AVL Insertion: Inside Case 
Inserting into Y 
destroys the 
AVL property 
at node j 
j 
k 
X 
h h+1 
Y 
Does “right rotation” 
restore balance? 
Z 
h 
Saturday, August 30, 2014 75
AVL Insertion: Inside Case 
j 
k 
X 
Y 
“Right rotation” 
does not restore 
balance… now k is 
out of balance 
Z 
h 
h+1 
h 
Saturday, August 30, 2014 76
AVL Insertion: Inside Case 
Consider the structure 
of subtree Y… j 
k 
X 
h h+1 
Y 
Z 
h 
Saturday, August 30, 2014 77
AVL Insertion: Inside Case 
j 
Y = node i and 
subtrees V and W 
k 
X 
h h+1 
V 
h 
Z 
W 
i 
h or h-1 
Saturday, August 30, 2014 78
AVL Insertion: Inside Case 
j 
k 
X 
V 
We will do a left-right 
“double rotation” . . . 
Z 
W 
i 
Saturday, August 30, 2014 79
Double rotation : first rotation 
j 
k 
i 
X V 
left rotation complete 
Z 
W 
Saturday, August 30, 2014 80
Double rotation : second rotation 
j 
k 
i 
X V 
Now do a right rotation 
Z 
W 
Saturday, August 30, 2014 81
Double rotation : second rotation 
i 
k j 
right rotation complete 
Balance has been 
restored 
h h h or h-1 
X V W Z 
Saturday, August 30, 2014 82
Pros and Cons of AVL Trees 
Arguments for AVL trees: 
1. Search is O(log N) since AVL trees are always balanced. 
2. Insertion and deletions are also O(logn) 
3. The height balancing adds no more than a constant factor to the speed of 
insertion. 
Arguments against using AVL trees: 
1. Difficult to program & debug; more space for balance factor. 
2. Asymptotically faster but rebalancing costs time. 
3. Most large searches are done in database systems on disk and use other 
structures (e.g. B-trees). 
4. May be OK to have O(N) for a single operation if total run time for many 
consecutive operations is fast (e.g. Splay trees). 
Saturday, August 30, 2014 83
B-Tree 
B-tree is a fairly well-balanced tree. 
All leaves are on the bottom level. 
All internal nodes (except perhaps the root node) have at 
least ceil(m / 2) (nonempty) children. 
The root node can have as few as 2 children if it is an 
internal node, and can obviously have no children if the 
root node is a leaf (that is, the whole tree consists only of 
the root node). 
Each leaf node (other than the root node if it is a leaf) must 
contain at least ceil(m / 2) - 1 keys. 
Saturday, August 30, 2014 84
Let's work our way through an example similar to that 
given by Kruse. Insert the following letters into what is 
originally an empty B-tree of order 5: 
C N G A H E K Q M F W L T Z D P R X Y S 
Order 5 means that a node can have a maximum of 5 
children and 4 keys. All nodes other than the root must 
have a minimum of 2 keys. The first 4 letters get inserted 
into the same node, resulting in this picture: 
Saturday, August 30, 2014 85
When we try to insert the H, we find no room in this node, so we 
split it into 2 nodes, moving the median item G up into a new root 
node. Note that in practice we just leave the A and C in the current 
node and place the H and N into a new node to the right of the old 
one. 
Inserting E, K, and Q proceeds without requiring any splits: 
H E K Q M F W L T Z D P R X Y S 
Saturday, August 30, 2014 86
Inserting M requires a split. Note that M happens to be the 
median key and so is moved up into the parent node. 
The letters F, W, L, and T are then added without needing any 
split. 
M F W L T Z D P R X Y S 
Saturday, August 30, 2014 87
When Z is added, the rightmost leaf must be split. The median item T is moved 
up into the parent node. Note that by moving up the median key, the tree is kept 
fairly balanced, with 2 keys in each of the resulting nodes. 
The insertion of D causes the leftmost leaf to be split. D happens to be the 
median key and so is the one moved up into the parent node. The letters P, R, 
X, and Y are then added without any need of splitting: 
Z D P R X Y S 
Saturday, August 30, 2014 88
Finally, when S is added, the node with N, P, Q, and R splits, 
sending the median Q up to the parent. However, the parent node 
is full, so it splits, sending the median M up to form a new root 
node. Note how the 3 pointers from the old parent node stay in the 
revised node that contains D and G. 
S 
Saturday, August 30, 2014 89
HEAP 
A max tree is a tree in which the key value in each node is no 
smaller than the key values in its children. A max heap is a 
complete binary tree that is also a max tree. 
A min tree is a tree in which the key value in each node is no 
larger than the key values in its children. A min heap is a 
complete binary tree that is also a min tree. 
Operations on heaps: 
- creation of an empty heap 
- insertion of a new element into the heap; 
- deletion of the largest element from the heap 
Saturday, August 30, 2014 90
14 
[1] 
[2] [3] 
12 7 
[5] [6] 
10 8 6 
Max Heap 
9 
[1] 
[2] [3] 
6 3 
5 
30 
[1] 
25 
[4] 
[2] 
2 
[1] 
[2] [3] 
7 4 
[5] [6] 
10 8 6 
Min Heap 
10 
[1] 
[2] [3] 
20 83 
50 
11 
[1] 
21 
[4] 
[2] 
[4] 
Saturday, August 30, 2014 91
Example of Insertion to Max Heap 
20 
15 2 
14 10 
initial location of new node 
21 
15 20 
14 10 2 
insert 21 into heap 
20 
15 5 
14 10 2 
insert 5 into heap 
Saturday, August 30, 2014 92
Insertion into a Max Heap 
void insert_max_heap(element item, int *n) 
{ 
int i; 
if (HEAP_FULL(*n)) { 
fprintf(stderr, “the heap is full.n”); 
exit(1); 
} 
i = ++(*n); 
while ((i!=1)&&(item.key>heap[i/2].key)) { 
heap[i] = heap[i/2]; 
i /= 2; 
} 
heap[i]= item; 
Saturday, August 30, 2014 93 
} 
2k-1=n ==> k=log2(n+1) 
O(log2n)
Example of Deletion from Max Heap 
20 
remove 
15 2 
14 10 
10 
15 2 
14 
15 
14 2 
10 
Saturday, August 30, 2014 94
Deletion from a Max Heap 
element delete_max_heap(int *n) 
{ 
int parent, child; 
element item, temp; 
if (HEAP_EMPTY(*n)) { 
fprintf(stderr, “The heap is emptyn”); 
exit(1); 
} 
/* save value of the element with the 
highest key */ 
item = heap[1]; 
/* use last element in heap to adjust heap */ 
temp = heap[(*n)--]; 
parent = 1; 
child = 2; 
Saturday, August 30, 2014 95
while (child <= *n) { 
/* find the larger child of the current 
parent */ 
if ((child < *n)&& 
(heap[child].key<heap[child+1].key)) 
child++; 
if (temp.key >= heap[child].key) break; 
/* move to the next lower level */ 
heap[parent] = heap[child]; 
child *= 2; 
} 
heap[parent] = temp; 
return item; 
} 
Saturday, August 30, 2014 96
Thank 
You 
Contact @ 
Email: kuberchandra@yahoo.com 
Saturday, August 30, 2014 97

More Related Content

What's hot

HPX: C++11 runtime система для параллельных и распределённых вычислений
HPX: C++11 runtime система для параллельных и распределённых вычисленийHPX: C++11 runtime система для параллельных и распределённых вычислений
HPX: C++11 runtime система для параллельных и распределённых вычислений
Platonov Sergey
 
Queue Implementation Using Array & Linked List
Queue Implementation Using Array & Linked ListQueue Implementation Using Array & Linked List
Queue Implementation Using Array & Linked List
PTCL
 
Monad presentation scala as a category
Monad presentation   scala as a categoryMonad presentation   scala as a category
Monad presentation scala as a category
samthemonad
 

What's hot (20)

Effective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPyEffective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPy
 
Introduction to matplotlib
Introduction to matplotlibIntroduction to matplotlib
Introduction to matplotlib
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
 
Stack Data structure
Stack Data structureStack Data structure
Stack Data structure
 
HPX: C++11 runtime система для параллельных и распределённых вычислений
HPX: C++11 runtime система для параллельных и распределённых вычисленийHPX: C++11 runtime система для параллельных и распределённых вычислений
HPX: C++11 runtime система для параллельных и распределённых вычислений
 
Data manipulation with dplyr
Data manipulation with dplyrData manipulation with dplyr
Data manipulation with dplyr
 
Queue Data Structure (w/ php egs)
Queue Data Structure (w/ php egs)Queue Data Structure (w/ php egs)
Queue Data Structure (w/ php egs)
 
Python for R developers and data scientists
Python for R developers and data scientistsPython for R developers and data scientists
Python for R developers and data scientists
 
Introduction to pandas
Introduction to pandasIntroduction to pandas
Introduction to pandas
 
Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)
 
data structure
data structuredata structure
data structure
 
Data Structures - Lecture 6 [queues]
Data Structures - Lecture 6 [queues]Data Structures - Lecture 6 [queues]
Data Structures - Lecture 6 [queues]
 
U3.stack queue
U3.stack queueU3.stack queue
U3.stack queue
 
Introduction to NumPy for Machine Learning Programmers
Introduction to NumPy for Machine Learning ProgrammersIntroduction to NumPy for Machine Learning Programmers
Introduction to NumPy for Machine Learning Programmers
 
Queue Implementation Using Array & Linked List
Queue Implementation Using Array & Linked ListQueue Implementation Using Array & Linked List
Queue Implementation Using Array & Linked List
 
Introduction to Pandas and Time Series Analysis [PyCon DE]
Introduction to Pandas and Time Series Analysis [PyCon DE]Introduction to Pandas and Time Series Analysis [PyCon DE]
Introduction to Pandas and Time Series Analysis [PyCon DE]
 
Rsplit apply combine
Rsplit apply combineRsplit apply combine
Rsplit apply combine
 
queue & its applications
queue & its applicationsqueue & its applications
queue & its applications
 
Monad presentation scala as a category
Monad presentation   scala as a categoryMonad presentation   scala as a category
Monad presentation scala as a category
 
Spark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with SparkSpark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with Spark
 

Viewers also liked

Viewers also liked (13)

algorithm unit 1
algorithm unit 1algorithm unit 1
algorithm unit 1
 
Data representation UNIT-1
Data representation UNIT-1Data representation UNIT-1
Data representation UNIT-1
 
Unit 4 jwfiles
Unit 4 jwfilesUnit 4 jwfiles
Unit 4 jwfiles
 
algorithm Unit 2
algorithm Unit 2 algorithm Unit 2
algorithm Unit 2
 
Preparation Data Structures 02 recursion
Preparation Data Structures 02 recursionPreparation Data Structures 02 recursion
Preparation Data Structures 02 recursion
 
07.2 Holland's Genetic Algorithms Schema Theorem
07.2 Holland's Genetic Algorithms Schema Theorem07.2 Holland's Genetic Algorithms Schema Theorem
07.2 Holland's Genetic Algorithms Schema Theorem
 
Hashing
HashingHashing
Hashing
 
algorithm Unit 4
algorithm Unit 4 algorithm Unit 4
algorithm Unit 4
 
Cs6402 design and analysis of algorithms impartant part b questions appasami
Cs6402 design and analysis of algorithms  impartant part b questions appasamiCs6402 design and analysis of algorithms  impartant part b questions appasami
Cs6402 design and analysis of algorithms impartant part b questions appasami
 
CS 6402 – DESIGN AND ANALYSIS OF ALGORITHMS questio
CS 6402 – DESIGN AND ANALYSIS OF ALGORITHMS questioCS 6402 – DESIGN AND ANALYSIS OF ALGORITHMS questio
CS 6402 – DESIGN AND ANALYSIS OF ALGORITHMS questio
 
Cs6402 design and analysis of algorithms may june 2016 answer key
Cs6402 design and analysis of algorithms may june 2016 answer keyCs6402 design and analysis of algorithms may june 2016 answer key
Cs6402 design and analysis of algorithms may june 2016 answer key
 
DESIGN AND ANALYSIS OF ALGORITHM (DAA)
DESIGN AND ANALYSIS OF ALGORITHM (DAA)DESIGN AND ANALYSIS OF ALGORITHM (DAA)
DESIGN AND ANALYSIS OF ALGORITHM (DAA)
 
Design and Analysis of Algorithms
Design and Analysis of AlgorithmsDesign and Analysis of Algorithms
Design and Analysis of Algorithms
 

Similar to ELEMENTARY DATASTRUCTURES

Similar to ELEMENTARY DATASTRUCTURES (20)

Presentation on Elementary data structures
Presentation on Elementary data structuresPresentation on Elementary data structures
Presentation on Elementary data structures
 
L1 - Recap.pdf
L1 - Recap.pdfL1 - Recap.pdf
L1 - Recap.pdf
 
Stacks and Queues with Linked List.pdf
Stacks and Queues with Linked List.pdfStacks and Queues with Linked List.pdf
Stacks and Queues with Linked List.pdf
 
Data Structures and Files
Data Structures and FilesData Structures and Files
Data Structures and Files
 
Data structure
Data  structureData  structure
Data structure
 
01 stack 20160908_jintaek_seo
01 stack 20160908_jintaek_seo01 stack 20160908_jintaek_seo
01 stack 20160908_jintaek_seo
 
linkedlist.pptx
linkedlist.pptxlinkedlist.pptx
linkedlist.pptx
 
Bt0065
Bt0065Bt0065
Bt0065
 
B T0065
B T0065B T0065
B T0065
 
My lecture stack_queue_operation
My lecture stack_queue_operationMy lecture stack_queue_operation
My lecture stack_queue_operation
 
DA_02_algorithms.pptx
DA_02_algorithms.pptxDA_02_algorithms.pptx
DA_02_algorithms.pptx
 
Cs341
Cs341Cs341
Cs341
 
Week2-stacks-queues.pptx
Week2-stacks-queues.pptxWeek2-stacks-queues.pptx
Week2-stacks-queues.pptx
 
Ds
DsDs
Ds
 
lect- 3&4.ppt
lect- 3&4.pptlect- 3&4.ppt
lect- 3&4.ppt
 
Stack and Queue
Stack and Queue Stack and Queue
Stack and Queue
 
TSAT Presentation1.pptx
TSAT Presentation1.pptxTSAT Presentation1.pptx
TSAT Presentation1.pptx
 
Data structures and algorithms
Data structures and algorithmsData structures and algorithms
Data structures and algorithms
 
What is data structure
What is data structureWhat is data structure
What is data structure
 
Ee693 sept2014quizgt1
Ee693 sept2014quizgt1Ee693 sept2014quizgt1
Ee693 sept2014quizgt1
 

More from Malikireddy Bramhananda Reddy

DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY
DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDYDATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY
DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY
Malikireddy Bramhananda Reddy
 
DATA STRUCTURES AND ALGORITHMS UNIT-3 TREES PREPARED BY M V BRAHMANANDA REDDY
DATA STRUCTURES AND ALGORITHMS UNIT-3 TREES PREPARED BY M V BRAHMANANDA REDDYDATA STRUCTURES AND ALGORITHMS UNIT-3 TREES PREPARED BY M V BRAHMANANDA REDDY
DATA STRUCTURES AND ALGORITHMS UNIT-3 TREES PREPARED BY M V BRAHMANANDA REDDY
Malikireddy Bramhananda Reddy
 
Datastructures and algorithms prepared by M.V.Brehmanada Reddy
Datastructures and algorithms prepared by M.V.Brehmanada ReddyDatastructures and algorithms prepared by M.V.Brehmanada Reddy
Datastructures and algorithms prepared by M.V.Brehmanada Reddy
Malikireddy Bramhananda Reddy
 
C notes by m v b reddy(gitam)imp notes all units notes 5 unit order
C notes by m v b  reddy(gitam)imp  notes  all units notes  5 unit orderC notes by m v b  reddy(gitam)imp  notes  all units notes  5 unit order
C notes by m v b reddy(gitam)imp notes all units notes 5 unit order
Malikireddy Bramhananda Reddy
 

More from Malikireddy Bramhananda Reddy (20)

M v bramhananda reddy dsa complete notes
M v bramhananda reddy dsa complete notesM v bramhananda reddy dsa complete notes
M v bramhananda reddy dsa complete notes
 
AVL TREE PREPARED BY M V BRAHMANANDA REDDY
AVL TREE PREPARED BY M V BRAHMANANDA REDDYAVL TREE PREPARED BY M V BRAHMANANDA REDDY
AVL TREE PREPARED BY M V BRAHMANANDA REDDY
 
B-TREE PREPARED BY M V BRAHMANANDA REDDY
B-TREE PREPARED BY M V BRAHMANANDA REDDYB-TREE PREPARED BY M V BRAHMANANDA REDDY
B-TREE PREPARED BY M V BRAHMANANDA REDDY
 
DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY
DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDYDATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY
DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY
 
DATA STRUCTURES AND ALGORITHMS UNIT-3 TREES PREPARED BY M V BRAHMANANDA REDDY
DATA STRUCTURES AND ALGORITHMS UNIT-3 TREES PREPARED BY M V BRAHMANANDA REDDYDATA STRUCTURES AND ALGORITHMS UNIT-3 TREES PREPARED BY M V BRAHMANANDA REDDY
DATA STRUCTURES AND ALGORITHMS UNIT-3 TREES PREPARED BY M V BRAHMANANDA REDDY
 
Datastructures and algorithms prepared by M.V.Brehmanada Reddy
Datastructures and algorithms prepared by M.V.Brehmanada ReddyDatastructures and algorithms prepared by M.V.Brehmanada Reddy
Datastructures and algorithms prepared by M.V.Brehmanada Reddy
 
C LANGUAGE UNIT-1 PREPARED BY M V BRAHMANANDA REDDY
C LANGUAGE UNIT-1 PREPARED BY M V BRAHMANANDA REDDYC LANGUAGE UNIT-1 PREPARED BY M V BRAHMANANDA REDDY
C LANGUAGE UNIT-1 PREPARED BY M V BRAHMANANDA REDDY
 
DATASTRUCTURES UNIT-1
DATASTRUCTURES UNIT-1DATASTRUCTURES UNIT-1
DATASTRUCTURES UNIT-1
 
C SLIDES PREPARED BY M V B REDDY
C SLIDES PREPARED BY  M V B REDDYC SLIDES PREPARED BY  M V B REDDY
C SLIDES PREPARED BY M V B REDDY
 
C AND DATASTRUCTURES PREPARED BY M V B REDDY
C AND DATASTRUCTURES PREPARED BY M V B REDDYC AND DATASTRUCTURES PREPARED BY M V B REDDY
C AND DATASTRUCTURES PREPARED BY M V B REDDY
 
C PROGRAMS
C PROGRAMSC PROGRAMS
C PROGRAMS
 
C LANGUAGE NOTES
C LANGUAGE NOTESC LANGUAGE NOTES
C LANGUAGE NOTES
 
C notes by m v b reddy(gitam)imp notes all units notes 5 unit order
C notes by m v b  reddy(gitam)imp  notes  all units notes  5 unit orderC notes by m v b  reddy(gitam)imp  notes  all units notes  5 unit order
C notes by m v b reddy(gitam)imp notes all units notes 5 unit order
 
Vcs29
Vcs29Vcs29
Vcs29
 
Vcs28
Vcs28Vcs28
Vcs28
 
Vcs26
Vcs26Vcs26
Vcs26
 
Vcs24
Vcs24Vcs24
Vcs24
 
Vcs23
Vcs23Vcs23
Vcs23
 
Vcs22
Vcs22Vcs22
Vcs22
 
Vcs21
Vcs21Vcs21
Vcs21
 

Recently uploaded

UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingUNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
rknatarajan
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
ankushspencer015
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 

Recently uploaded (20)

UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingUNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghly
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
 
Introduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxIntroduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptx
 
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur EscortsRussian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptx
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 
MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTING
MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTINGMANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTING
MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTING
 
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINEDJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
 
Introduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxIntroduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptx
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
 

ELEMENTARY DATASTRUCTURES

  • 1. Data Structures & Applications By: M V B REDDY GITAM UNIVERSITY ,BLR Saturday, August 30, 2014 1
  • 2. Data Structure is the structural representation of logical relationships between elements of data. Data Structure = Organized Data + Operations Data Structure + Algorithm = Program Algorithm is a step-by-step finite sequence of instructions, to solve a well-defined computational problem. •Data Structure (In Memory) = Storage Structure •Data Structure (In Auxiliary Memory) = File Structure Complexity Analysis of Algorithm Time Complexity* Space Complexity** * Time depends on Algorithms, Languages, Compilers, CPU Speed etc. It is analyzed for best, average and worst case of input data. ** Space needed by instruction space, data space and environ. Stack space. Amstrong Complexity (amortized) 2
  • 3. Data Structure Primitive DS Non-primitive DS Integer Float Character Pointer Arrays Lists Files Linear List Non-linear List Stacks Queues Graphs Trees Saturday, August 30, 2014 3
  • 4. ARRAYS An array is a collection of homogeneous data elements described by a single name. Each element is referenced by a subscripted variable or value, called subscript or index enclosed in parenthesis. •If an element is referenced by a single subscript, then array is known as 1-D or single array (linear array). --- Array[N] •If two subscripts are required, the array is known as 2-D or matrix array. ---- Array[M][N] •An array referenced by two or more subscripts is known as multidimensional array. ----- Array[X][Y][Z] Sparse array is an application of arrays where nearly all the elements have same values (usually zeros) and this value is constant. 1-D sparse array is called sparse vector and 2-D sparse array is called sparse matrix. Saturday, August 30, 2014 4
  • 5. LISTS A list is a ordered set consisting of a varying number of elements (or nodes) linked by means of pointers. Each node is divided into two parts: INFO LINK A list overcome the limitation of fixed size in an array. A list may be linear ( stack, Queue) or non-linear (Tree, Graph). NODE DATA LINK DATA LINK DATA LINK DATA LINK START Types of linked list (LL): 1. Singly LL 2. Doubly LL 3. Circular LL Saturday, August 30, 2014 5
  • 6. Types of linked lists 1. Singly linked list Begins with a pointer to the first node Terminates with a null pointer Only traversed in one direction 2. Circular, singly linked list (e.g., time sharing in OS, multiplayer game) Pointer in the last node points back to the first node 3. Doubly linked list (e.g., applications need more deletions) Two “start pointers” – first element and last element Each node has a forward pointer and a backward pointer Allows traversals both forwards and backwards 4. Circular, doubly linked list Forward pointer of the last node points to the first node and backward pointer of the first node points to the last node * Free storage, garbage collection, Dangling reference, reference counter, storage compaction Saturday, August 30, 2014 6
  • 7. STACKS A stack is a non-primitive linear data structure (LIFO). It is an ordered collections of items where insertion and deletion take place at one end only called top of stack (TOS). Stack Operations: Push() Pop() Top() Size() IsEmpty() Stack Applications: •Page-visited history in a Web browser •Undo sequence in a text editor •Saving local variables when there is recursive function calls •Conversion of infix to postfix expression •Auxiliary data structure for algorithms •Component of other data structures Saturday, August 30, 2014 7
  • 8. 1 /* stack.c 2 dynamic stack program */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 struct stackNode { /* self-referential structure *7/ int data; 8 struct stackNode *nextPtr; 9 }; 10 11 typedef struct stackNode StackNode; 12 typedef StackNode *StackNodePtr; 13 14 void push( StackNodePtr *, int ); 15 int pop( StackNodePtr * ); 16 int isEmpty( StackNodePtr ); 17 void printStack( StackNodePtr ); 18 void instructions( void ); 19 20 int main() 21 { 22 StackNodePtr stackPtr = NULL; /* points to s2t3ack itnotp c*h/oice, value; 24 25 instructions(); 26 printf( "? " ); 27 scanf( "%d", &choice ); 28 Outline 1. Define struct 1.1 Function definitions 1.2 Initialize variables 2. Input choice Saturday, August 30, 2014 8
  • 9. 29 while ( choice != 3 ) { 30 31 switch ( choice ) { 32 case 1: /* push value onto stack */ 33 printf( "Enter an integer: " ); 34 scanf( "%d", &value ); 35 push( &stackPtr, value ); 36 printStack( stackPtr ); 37 break; 38 case 2: /* pop value off stack */ 39 if ( !isEmpty( stackPtr ) ) 40 printf( "The popped value is %d.n", 41 pop( &stackPtr ) ); 42 43 printStack( stackPtr ); 44 break; 45 default: 46 printf( "Invalid choice.nn" ); 47 instructions(); 48 break; 49 } 50 51 printf( "? " ); 52 scanf( "%d", &choice ); 53 } 54 55 printf( "End of run.n" ); 56 return 0; 57 } 58 Outline 2.1 switch statement Saturday, August 30, 2014 9
  • 10. 59 /* Print the instructions */ 60 void instructions( void ) 61 { 62 printf( "Enter choice:n" 63 "1 to push a value on the stackn" 64 "2 to pop a value off the stackn" 65 "3 to end programn" ); 66 } 67 68 /* Insert a node at the stack top */ 69 void push( StackNodePtr *topPtr, int info ) 70 { 71 StackNodePtr newPtr; 72 73 newPtr = malloc( sizeof( StackNode ) ); 74 if ( newPtr != NULL ) { 75 newPtr->data = info; 76 newPtr->nextPtr = *topPtr; 77 *topPtr = newPtr; 78 } 79 else 80 printf( "%d not inserted. No memory 8av1ailable.n", info ); 82 } 83 Outline 3. Function definitions Saturday, August 30, 2014 10
  • 11. 84 /* Remove a node from the stack top */ 85 int pop( StackNodePtr *topPtr ) 86 { 87 StackNodePtr tempPtr; 88 int popValue; 89 90 tempPtr = *topPtr; 91 popValue = ( *topPtr )->data; 92 *topPtr = ( *topPtr )->nextPtr; 93 free( tempPtr ); 94 return popValue; 95 } 96 97 /* Print the stack */ 98 void printStack( StackNodePtr currentPtr ) 99 { 100 if ( currentPtr == NULL ) 101 printf( "The stack is empty.nn" ); 102 else { 103 printf( "The stack is:n" ); 104 105 while ( currentPtr != NULL ) { 106 printf( "%d --> ", currentPtr->data ); 107 currentPtr = currentPtr->nextPtr; 108 } 109 110 printf( "NULLnn" ); 111 } 112 } 113 Outline 3. Function definitions Saturday, August 30, 2014 11
  • 12. 114 /* Is the stack empty? */ 115 int isEmpty( StackNodePtr topPtr ) 116 { 117 return topPtr == NULL; 118 } Enter choice: 1 to push a value on the stack 2 to pop a value off the stack 3 to end program ? 1 Enter an integer: 5 The stack is: 5 --> NULL ? 1 Enter an integer: 6 The stack is: 6 --> 5 --> NULL ? 1 Enter an integer: 4 The stack is: 4 --> 6 --> 5 --> NULL ? 2 The popped value is 4. The stack is: 6 --> 5 --> NULL Outline 3. Function definitions Program Output Saturday, August 30, 2014 12
  • 13. ? 2 The popped value is 6. The stack is: 5 --> NULL ? 2 The popped value is 5. The stack is empty. ? 2 The stack is empty. ? 4 Invalid choice. Enter choice: 1 to push a value on the stack 2 to pop a value off the stack 3 to end program ? 3 End of run. Outline Program Output Saturday, August 30, 2014 13
  • 14. Tower of Hanoi: Application of stack History from Kashi Vishwanath temple which contains a large room with three time-worn posts in it surrounded by 64 golden disks. Brahmin priests, acting out the command of an ancient prophecy, have been moving these disks, in accordance with the immutable rules of the Brahma, since that time. The puzzle is therefore also known as the Tower of Brahma puzzle. According to the legend, when the last move of the puzzle will be completed, the world will end. If the legend were true, and if the priests were able to move disks at a rate of one per second, using the smallest number of moves, it would take them 264−1 seconds or roughly 585 billion years or 18,446,744,073,709,551,615 turns to finish, or about 45 times the life span of the sun. Saturday, August 30, 2014 14
  • 15. Tower of Hanoi: Application of stack Three pegs A, B, C are given. Peg A contains N disks with decreasing size. The objective is to move disks from A to C using B. Step 2 Step 1 Step 3 Tower(N, A, B, C) If N=1 Tower(1, A, B, C) or A->C If N>1 1. Tower(N-1, A, C, B) 2. Tower(1, A, B, C) or A->C 3. Tower(N-1, B, A, C) Saturday, August 30, 2014 15
  • 16. STACKS - Excercise Describe the output of the following series of stack operations •Push(8) •Push(3) •Pop() •Push(2) •Push(5) •Pop() •Pop() •Push(9) •Push(1) 3 8 5 2 8 1 9 8 Saturday, August 30, 2014 16
  • 17. QUEUES A queue is a non-primitive linear data structure (FIFO). It is an ordered collections of items where insertion takes place at one end called rear and deletion takes place at other end called front. Queue Operations: Enqueue() Dequeue() Front() Size() IsEmpty() Queue Applications: Direct applications •Waiting lines •Access to shared resources (e.g., printer) •Multiprogramming Indirect applications •Auxiliary data structure for algorithms •Component of other data structures Saturday, August 30, 2014 17
  • 18. 1 /* queue.c 2 Operating and maintaining a queue */ 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 7 struct queueNode { /* self-referential structure */ 8 char data; 9 struct queueNode *nextPtr; 10 }; 11 12 typedef struct queueNode QueueNode; 13 typedef QueueNode *QueueNodePtr; 14 15 /* function prototypes */ 16 void printQueue( QueueNodePtr ); 17 int isEmpty( QueueNodePtr ); 18 char dequeue( QueueNodePtr *, QueueNodePtr * ); 19 void enqueue( QueueNodePtr *, QueueNodePtr *, char ); 20 void instructions( void ); 21 22 int main() 23 { 24 QueueNodePtr headPtr = NULL, tailPtr = NULL; 25 int choice; 26 char item; 27 28 instructions(); 29 printf( "? " ); 30 scanf( "%d", &choice ); Outline 1. Define struct 1.1 Function prototypes 1.2 Initialize variables 2. Input choice Saturday, August 30, 2014 18
  • 19. 31 32 while ( choice != 3 ) { 33 34 switch( choice ) { 35 36 case 1: 37 printf( "Enter a character: " ); 38 scanf( "n%c", &item ); 39 enqueue( &headPtr, &tailPtr, item ); 40 printQueue( headPtr ); 41 break; 42 case 2: 43 if ( !isEmpty( headPtr ) ) { 44 item = dequeue( &headPtr, &tailPtr ); 45 printf( "%c has been dequeued.n", item ); 46 } 47 48 printQueue( headPtr ); 49 break; 50 51 default: 52 printf( "Invalid choice.nn" ); 53 instructions(); 54 break; 55 } 56 57 printf( "? " ); 58 scanf( "%d", &choice ); 59 } 60 61 printf( "End of run.n" ); 62 return 0; 63 } 64 Outline 2.1 Switch statement Saturday, August 30, 2014 19
  • 20. 65 void instructions( void ) 66 { 67 printf ( "Enter your choice:n" 68 " 1 to add an item to the queuen" 69 " 2 to remove an item from the queuen" 70 " 3 to endn" ); 71 } 72 73 void enqueue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr, 74 char value ) 75 { 76 QueueNodePtr newPtr; 77 78 newPtr = malloc( sizeof( QueueNode ) ); 79 80 if ( newPtr != NULL ) { 81 newPtr->data = value; 82 newPtr->nextPtr = NULL; 83 84 if ( isEmpty( *headPtr ) ) 85 *headPtr = newPtr; 86 else 87 ( *tailPtr )->nextPtr = newPtr; 88 89 *tailPtr = newPtr; 90 } 91 else 92 printf( "%c not inserted. No memory available.n", 93 value ); 94 } 95 Outline 3 function definitions Saturday, August 30, 2014 20
  • 21. 96 char dequeue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr )97 { 98 char value; 99 QueueNodePtr tempPtr; 100 101 value = ( *headPtr )->data; 102 tempPtr = *headPtr; 103 *headPtr = ( *headPtr )->nextPtr; 104 105 if ( *headPtr == NULL ) 106 *tailPtr = NULL; 107 108 free( tempPtr ); 109 return value; 110 } 111 112 int isEmpty( QueueNodePtr headPtr ) 113 { 114 return headPtr == NULL; 115 } 116 117 void printQueue( QueueNodePtr currentPtr ) 118 { 119 if ( currentPtr == NULL ) 120 printf( "Queue is empty.nn" ); 121 else { 122 printf( "The queue is:n" ); Outline 3 function definitions Saturday, August 30, 2014 21
  • 22. 123 124 while ( currentPtr != NULL ) { 125 printf( "%c --> ", currentPtr->data ); 126 currentPtr = currentPtr->nextPtr; 127 } 128 129 printf( "NULLnn" ); 130 } 131 } Enter your choice: 1 to add an item to the queue 2 to remove an item from the queue 3 to end ? 1 Enter a character: A The queue is: A --> NULL ? 1 Enter a character: B The queue is: A --> B --> NULL ? 1 Enter a character: C The queue is: A --> B --> C --> NULL Outline 3 function definitions Output Saturday, August 30, 2014 22
  • 23. ? 2 A has been dequeued. The queue is: B --> C --> NULL ? 2 B has been dequeued. The queue is: C --> NULL ? 2 C has been dequeued. Queue is empty. ? 2 Queue is empty. ? 4 Invalid choice. Enter your choice: 1 to add an item to the queue 2 to remove an item from the queue 3 to end ? 3 End of run. Outline Output Saturday, August 30, 2014 23
  • 24. Types of Queues 1. Circular Queue Elements are represented in circular fashion. Insertion is done at very first location if last location is full. Rear=(rear + 1) % Size Front=(Front +1) % Size 2. Double Ended Queue (deque) Elements can be inserted or deleted from both ends. Input restricted deque-insertion at only one end Output restricted deque-deletion at only one end 3. Priority Queue Each element is assigned with a priority An element with higher priority is processed first Two elements with same priority are processed in FIFO order Saturday, August 30, 2014 24
  • 25. QUEUES - Excercise Describe the output of the following series of queue operations •enqueue(8) •enqueue(3) •dequeue() •enqueue(2) •enqueue(5) •dequeue() •dequeue() •enqueue(9) •enqueue(1) 8 3 3 2 5 5 9 1 S8a/3tu0r/d2a0y1, 4August 30, 2014 25
  • 26. The Trees A tree is a hierarchical representation of a finite set of one or more data items such that: •There is a special node called the root of the tree. •Data items are partitioned into mutually exclusive subsets each of which is itself a sub tree. Trees 2-way tree (binary tree) m-way tree Binary Search Balanced Binary Expression Height Balanced Weight Balanced Height Balanced Weight Balanced Saturday, August 30, 2014 26
  • 27. Trees Data Structures • Tree – Nodes – Each node can have 0 or more children – A node can have at most one parent • Binary tree – Tree with 0–2 children per node Tree Binary Tree Saturday, August 30, 2014 27
  • 28. Trees • Terminology – Root  no parent – Leaf  no child – Interior  non-leaf – Height  distance from root to leaf Root node Interior nodes Height Leaf nodes Saturday, August 30, 2014 28
  • 29. The degree (shown in green color)of a tree is the maximum degree of node in a tree. Depth (shown in red color) of a tree is the maximum level of any node in a tree. B 1 2 2 2 2 1 3 E F 3 3 3 3 3 3 2 0 0 1 0 0 K L A C G D H I J M Level 1 2 3 4 3 0 0 0 4 4 4 Saturday, August 30, 2014 29
  • 30. Binary Trees A binary tree is a tree in which no node can have more than two child nodes (left and right child). 2-tree or extended binary tree: Each node has either no children or two children. It is used to represent and compute any algebraic expression using binary operation. e.g. E = (a + b) / ((c - d) * e) / + * a b - e c d Fig. - expression tree Saturday, August 30, 2014 30
  • 31. Samples of Trees A B A B Complete Binary Tree A B C F E G I D 1 2 3 H Skewed Binary Tree E C D 4 5 Saturday, August 30, 2014 31
  • 32. Tree Traversal 1. Preorder Traversal (Root -> Left -> Right) 2. In order Traversal (Left -> Root -> Right) 3. Post order traversal (Left -> Right -> Root) In order traversal – prints the node values in ascending order • Traverse the left sub tree with an in order traversal • Process the value in the node (i.e., print the node value) • Traverse the right sub tree with an in order traversal Preorder traversal •Process the value in the node •Traverse the left sub tree with a preorder traversal •Traverse the right sub tree with a preorder traversal Post order traversal •Traverse the left sub tree with a post order traversal •Traverse the right sub tree with a post order traversal •Process the value in the node Saturday, August 30, 2014 32
  • 33. preorder: A B C D E F G H I inorder: B C A E D G H F I A B, C D, E, F, G, H, I A B D, E, F, G, H, I C A B C D E F G I H Saturday, August 30, 2014 33
  • 34. 1 /* tree.c 2 Create a binary tree and traverse it 3 preorder, inorder, and postorder */ 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <time.h> 7 8 struct treeNode { 9 struct treeNode *leftPtr; 10 int data; 11 struct treeNode *rightPtr; 12 }; 13 14 typedef struct treeNode TreeNode; 15 typedef TreeNode *TreeNodePtr; 16 17 void insertNode( TreeNodePtr *, int ); 18 void inOrder( TreeNodePtr ); 19 void preOrder( TreeNodePtr ); 20 void postOrder( TreeNodePtr ); 21 22 int main() 23 { 24 int i, item; 25 TreeNodePtr rootPtr = NULL; 26 27 srand( time( NULL ) ); 28 Outline 1. Define struct 1.1 Function prototypes 1.2 Initialize variables Saturday, August 30, 2014 34
  • 35. Outline 1.3 Insert random elements 2. Function calls 3. Function definitions 29 /* insert random values between 1 and 15 in the tree */ 30 printf( "The numbers being placed in the tree are:n" ); 31 32 for ( i = 1; i <= 10; i++ ) { 33 item = rand() % 15; 34 printf( "%3d", item ); 35 insertNode( &rootPtr, item ); 36 } 37 38 /* traverse the tree preOrder */ 39 printf( "nnThe preOrder traversal is:n" ); 40 preOrder( rootPtr ); 41 42 /* traverse the tree inOrder */ 43 printf( "nnThe inOrder traversal is:n" ); 44 inOrder( rootPtr ); 45 46 /* traverse the tree postOrder */ 47 printf( "nnThe postOrder traversal is:n" ); 48 postOrder( rootPtr ); 49 50 return 0; 51 } 52 53 void insertNode( TreeNodePtr *treePtr, int value ) 54 { 55 if ( *treePtr == NULL ) { /* *treePtr is NULL */ 56 *treePtr = malloc( sizeof( TreeNode ) ); 57 58 if ( *treePtr != NULL ) { 59 ( *treePtr )->data = value; 60 ( *treePtr )->leftPtr = NULL; 61 ( *treePtr )->rightPtr = NULL; 62 } Saturday, August 30, 2014 35
  • 36. Outline 3. Function definitions 63 else 64 printf( "%d not inserted. No memory available.n", 65 value ); 66 } 67 else 68 if ( value < ( *treePtr )->data ) 69 insertNode( &( ( *treePtr )->leftPtr ), value ); 70 else if ( value > ( *treePtr )->data ) 71 insertNode( &( ( *treePtr )->rightPtr ), value ); 72 else 73 printf( "dup" ); 74 } 75 76 void inOrder( TreeNodePtr treePtr ) 77 { 78 if ( treePtr != NULL ) { 79 inOrder( treePtr->leftPtr ); 80 printf( "%3d", treePtr->data ); 81 inOrder( treePtr->rightPtr ); 82 } 83 } 84 85 void preOrder( TreeNodePtr treePtr ) 86 { 87 if ( treePtr != NULL ) { 88 printf( "%3d", treePtr->data ); 89 preOrder( treePtr->leftPtr ); 90 preOrder( treePtr->rightPtr ); 91 } 92 } Saturday, August 30, 2014 36
  • 37. Outline 3. Function definitions Program Output 93 94 void postOrder( TreeNodePtr treePtr ) 95 { 96 if ( treePtr != NULL ) { 97 postOrder( treePtr->leftPtr ); 98 postOrder( treePtr->rightPtr ); 99 printf( "%3d", treePtr->data ); 100 } 101 } The numbers being placed in the tree are: 7 8 0 6 14 1 0dup 13 0dup 7dup The preOrder traversal is: 7 0 6 1 8 14 13 The inOrder traversal is: 0 1 6 7 8 13 14 The postOrder traversal is: 1 6 0 13 14 8 7 Saturday, August 30, 2014 37
  • 38. Binary Search Trees • Key property – Value at node • Smaller values in left subtree • Larger values in right subtree – Example • X > Y • X < Z Y X Z Saturday, August 30, 2014 38
  • 39. Binary Search Trees Binary search tree • Values in left sub tree less than parent • Values in right sub tree greater than parent • Applications: Facilitates duplicate elimination, generating Huffman codes, expression tree • Fast searches - for a balanced tree, maximum of log n comparisons 47 25 77 11 43 65 93 7 17 31 44 68 Saturday, August 30, 2014 39
  • 40. Building expression tree: An Application a b c * + Step 1: Push a, b and c sub trees into stack. Step 2: When operator * is encountered, pop top two sub trees from stack and build tree as: * b c Step 3: Push the above sub tree onto stack. Step 4: When operator + is encountered, pop top two sub trees from stack and build the tree as: + a * b c Saturday, August 30, 2014 40
  • 41. Binary Search Trees • Examples 30 2 25 45 Binary 10 search trees 5 10 45 2 25 30 Not a binary search tree 5 5 2 10 30 25 45 Saturday, August 30, 2014 41
  • 42. Binary Tree Implementation Class Node { int data; // Could be int, a class, etc Node *left, *right; // null if empty void insert ( int data ) { … } void delete ( int data ) { … } Node *find ( int data ) { … } … } Saturday, August 30, 2014 42
  • 43. Iterative Search of Binary Tree Node *Find( Node *n, int key) { while (n != NULL) { if (n->data == key) // Found it return n; if (n->data > key) // In left subtree n = n->left; else // In right subtree n = n->right; } return null; } Node * n = Find( root, 5); Saturday, August 30, 2014 43
  • 44. Recursive Search of Binary Tree Node *Find( Node *n, int key) { if (n == NULL) // Not found return( n ); else if (n->data == key) // Found it return( n ); else if (n->data > key) // In left subtree return Find( n->left, key ); else // In right subtree return Find( n->right, key ); } Node * n = Find( root, 5); Saturday, August 30, 2014 44
  • 45. Example Binary Searches • Find ( root, 2 ) 5 10 30 root 2 25 45 5 2 10 30 25 45 10 > 2, left 5 > 2, left 2 = 2, found 5 > 2, left 2 = 2, found Saturday, August 30, 2014 45
  • 46. Example Binary Searches • Find (root, 25 ) 5 10 30 2 25 45 5 2 10 30 25 45 10 < 25, right 30 > 25, left 25 = 25, found 5 < 25, right 45 > 25, left 30 > 25, left 10 < 25, right 25 = 25, found Saturday, August 30, 2014 46
  • 47. Binary Search Tree – Insertion • Algorithm 1. Perform search for value X 2. Search will end at node Y (if X not in tree) 3. If X < Y, insert new leaf X as new left subtree for Y 4. If X > Y, insert new leaf X as new right subtree for Y • Observations – O( log(n) ) operation for balanced tree – Insertions may unbalance tree Saturday, August 30, 2014 47
  • 48. Example Insertion • Insert ( 20 ) 5 10 30 2 25 45 10 < 20, right 30 > 20, left 25 > 20, left Insert 20 on left 20 Saturday, August 30, 2014 48
  • 49. Insert Node in Binary Search Tree 40 30 5 2 30 5 40 2 35 80 30 5 40 2 80 Insert 80 Insert 35 Saturday, August 30, 2014 49
  • 50. Binary Search Tree – Deletion • Algorithm 1. Perform search for value X 2. If X is a leaf, delete X 3. Else // must delete internal node a) Replace with largest value Y on left subtree OR smallest value Z on right subtree b) Delete replacement value (Y or Z) from subtree Observation – O( log(n) ) operation for balanced tree – Deletions may unbalance tree Saturday, August 30, 2014 50
  • 51. Example Deletion (Leaf) • Delete ( 25 ) 5 10 30 2 25 45 10 < 25, right 30 > 25, left 25 = 25, delete 5 10 30 2 45 Saturday, August 30, 2014 51
  • 52. Example Deletion (Internal Node) • Delete ( 10 ) 5 10 30 2 25 45 5 5 30 2 25 45 2 5 30 2 25 45 Replacing 10 with largest value in left subtree Replacing 5 with largest value in left subtree Deleting leaf Saturday, August 30, 2014 52
  • 53. Example Deletion (Internal Node) • Delete ( 10 ) 5 10 30 2 25 45 5 25 30 2 25 45 5 25 30 2 45 Replacing 10 with smallest value in right subtree Deleting leaf Resulting tree Saturday, August 30, 2014 53
  • 54. Deletion for A Binary Search Tree 40 20 60 non-leaf node 10 30 50 70 45 55 52 40 20 55 10 30 50 70 45 52 Before deleting 60 After deleting 60 Saturday, August 30, 2014 54
  • 55. Binary Search Properties • Time of search – Proportional to height of tree – Balanced binary tree • O( log(n) ) time – Degenerate tree • O( n ) time • Like searching linked list / unsorted array Saturday, August 30, 2014 55
  • 56. AVL tree AVL trees are height-balanced binary search trees Balance factor of a node= height(left sub tree) - height(right sub tree) An AVL tree has balance factor calculated at every node For every node, heights of left and right sub tree can differ by no more than 1 Store current heights in each node AVL property violated here Saturday, August 30, 2014 56
  • 57. Rotations • When the tree structure changes (e.g., insertion or deletion), we need to transform the tree to restore the AVL tree property. • This is done using single rotations or double rotations. x e.g. Single Rotation y A B C y x A B C Before Rotation After Rotation Saturday, August 30, 2014 57
  • 58. Rotations • Since an insertion/deletion involves adding/deleting a single node, this can only increase/decrease the height of some subtree by 1 • Thus, if the AVL tree property is violated at a node x, it means that the heights of left(x) and right(x) differ by exactly 2. • Rotations will be applied to x to restore the AVL tree property. Saturday, August 30, 2014 58
  • 59. Single rotation The new key is inserted in the subtree A. The AVL-property is violated at x height of left(x) is h+2 height of right(x) is h. Saturday, August 30, 2014 59
  • 60. Single rotation The new key is inserted in the subtree C. The AVL-property is violated at x. Single rotation takes O(1) time. Insertion takes O(log N) time. Saturday, August 30, 2014 60
  • 61. 5 AVL Tree 3 1 4 3 1 4 y A Insert 0.8 8 0.8 5 x 8 B Saturday, August 30, 2014 61 C 3 5 1 0.8 4 8 After rotation
  • 62. Double rotation The new key is inserted in the subtree B1 or B2. The AVL-property is violated at x. x-y-z forms a zig-zag shape also called left-right rotate Saturday, August 30, 2014 62
  • 63. Double rotation The new key is inserted in the subtree B1 or B2. The AVL-property is violated at x. also called right-left rotate Saturday, August 30, 2014 63
  • 64. 5 AVL Tree 3 1 4 3 y 1 4 A z 3.5 Insert 3.5 8 5 x 8 4 5 1 3 B 3.5 After Rotation C 8 Saturday, August 30, 2014 64
  • 65. An Extended Example Insert 3,2,1,4,5,6,7, 16,15,14 3 Fig 1 3 2 Fig 2 3 2 1 Fig 3 Single rotation 2 1 3 Fig 4 2 1 3 4 Fig 5 2 1 3 Single rotation 4 5 Fig 6 Saturday, August 30, 2014 65
  • 66. Insert 3,2,1,4,5,6,7, 16,15,14 2 1 4 3 5 2 1 4 Single rotation 3 5 Fig 8 Fig 7 6 4 2 5 1 3 6 Fig 9 4 2 5 Single rotation 1 3 6 Fig 10 7 4 2 6 1 3 7 5 Fig 11 Saturday, August 30, 2014 66
  • 67. 4 Insert 3,2,1,4,5,6,7, 16,15,14 2 6 1 3 7 5 16 Fig 12 4 2 6 1 3 7 Double rotation 5 16 15 Fig 13 4 2 6 1 3 15 5 16 Fig 14 7 Saturday, August 30, 2014 67
  • 68. 4 2 7 1 3 15 6 5 14 16 Fig 16 Insert 3,2,1,4,5,6,7, 16,15,14 4 2 6 1 3 15 5 Double rotation 16 7 14 Fig 15 Saturday, August 30, 2014 68
  • 69. AVL Insertion: Outside Case j Consider a valid AVL subtree k h X Y Z h h Saturday, August 30, 2014 69
  • 70. AVL Insertion: Outside Case j k X h+1 h Y Z Inserting into X destroys the AVL property at node j h Saturday, August 30, 2014 70
  • 71. AVL Insertion: Outside Case j k X h+1 h Y Do a “right rotation” Z h Saturday, August 30, 2014 71
  • 72. Single right rotation j k X h+1 h Y Do a “right rotation” Z h Saturday, August 30, 2014 72
  • 73. Outside Case Completed j k “Right rotation” done! (“Left rotation” is mirror symmetric) h+1 h X Y Z h AVL property has been restored! Saturday, August 30, 2014 73
  • 74. AVL Insertion: Inside Case j Consider a valid AVL subtree k h h X Y Z h Saturday, August 30, 2014 74
  • 75. AVL Insertion: Inside Case Inserting into Y destroys the AVL property at node j j k X h h+1 Y Does “right rotation” restore balance? Z h Saturday, August 30, 2014 75
  • 76. AVL Insertion: Inside Case j k X Y “Right rotation” does not restore balance… now k is out of balance Z h h+1 h Saturday, August 30, 2014 76
  • 77. AVL Insertion: Inside Case Consider the structure of subtree Y… j k X h h+1 Y Z h Saturday, August 30, 2014 77
  • 78. AVL Insertion: Inside Case j Y = node i and subtrees V and W k X h h+1 V h Z W i h or h-1 Saturday, August 30, 2014 78
  • 79. AVL Insertion: Inside Case j k X V We will do a left-right “double rotation” . . . Z W i Saturday, August 30, 2014 79
  • 80. Double rotation : first rotation j k i X V left rotation complete Z W Saturday, August 30, 2014 80
  • 81. Double rotation : second rotation j k i X V Now do a right rotation Z W Saturday, August 30, 2014 81
  • 82. Double rotation : second rotation i k j right rotation complete Balance has been restored h h h or h-1 X V W Z Saturday, August 30, 2014 82
  • 83. Pros and Cons of AVL Trees Arguments for AVL trees: 1. Search is O(log N) since AVL trees are always balanced. 2. Insertion and deletions are also O(logn) 3. The height balancing adds no more than a constant factor to the speed of insertion. Arguments against using AVL trees: 1. Difficult to program & debug; more space for balance factor. 2. Asymptotically faster but rebalancing costs time. 3. Most large searches are done in database systems on disk and use other structures (e.g. B-trees). 4. May be OK to have O(N) for a single operation if total run time for many consecutive operations is fast (e.g. Splay trees). Saturday, August 30, 2014 83
  • 84. B-Tree B-tree is a fairly well-balanced tree. All leaves are on the bottom level. All internal nodes (except perhaps the root node) have at least ceil(m / 2) (nonempty) children. The root node can have as few as 2 children if it is an internal node, and can obviously have no children if the root node is a leaf (that is, the whole tree consists only of the root node). Each leaf node (other than the root node if it is a leaf) must contain at least ceil(m / 2) - 1 keys. Saturday, August 30, 2014 84
  • 85. Let's work our way through an example similar to that given by Kruse. Insert the following letters into what is originally an empty B-tree of order 5: C N G A H E K Q M F W L T Z D P R X Y S Order 5 means that a node can have a maximum of 5 children and 4 keys. All nodes other than the root must have a minimum of 2 keys. The first 4 letters get inserted into the same node, resulting in this picture: Saturday, August 30, 2014 85
  • 86. When we try to insert the H, we find no room in this node, so we split it into 2 nodes, moving the median item G up into a new root node. Note that in practice we just leave the A and C in the current node and place the H and N into a new node to the right of the old one. Inserting E, K, and Q proceeds without requiring any splits: H E K Q M F W L T Z D P R X Y S Saturday, August 30, 2014 86
  • 87. Inserting M requires a split. Note that M happens to be the median key and so is moved up into the parent node. The letters F, W, L, and T are then added without needing any split. M F W L T Z D P R X Y S Saturday, August 30, 2014 87
  • 88. When Z is added, the rightmost leaf must be split. The median item T is moved up into the parent node. Note that by moving up the median key, the tree is kept fairly balanced, with 2 keys in each of the resulting nodes. The insertion of D causes the leftmost leaf to be split. D happens to be the median key and so is the one moved up into the parent node. The letters P, R, X, and Y are then added without any need of splitting: Z D P R X Y S Saturday, August 30, 2014 88
  • 89. Finally, when S is added, the node with N, P, Q, and R splits, sending the median Q up to the parent. However, the parent node is full, so it splits, sending the median M up to form a new root node. Note how the 3 pointers from the old parent node stay in the revised node that contains D and G. S Saturday, August 30, 2014 89
  • 90. HEAP A max tree is a tree in which the key value in each node is no smaller than the key values in its children. A max heap is a complete binary tree that is also a max tree. A min tree is a tree in which the key value in each node is no larger than the key values in its children. A min heap is a complete binary tree that is also a min tree. Operations on heaps: - creation of an empty heap - insertion of a new element into the heap; - deletion of the largest element from the heap Saturday, August 30, 2014 90
  • 91. 14 [1] [2] [3] 12 7 [5] [6] 10 8 6 Max Heap 9 [1] [2] [3] 6 3 5 30 [1] 25 [4] [2] 2 [1] [2] [3] 7 4 [5] [6] 10 8 6 Min Heap 10 [1] [2] [3] 20 83 50 11 [1] 21 [4] [2] [4] Saturday, August 30, 2014 91
  • 92. Example of Insertion to Max Heap 20 15 2 14 10 initial location of new node 21 15 20 14 10 2 insert 21 into heap 20 15 5 14 10 2 insert 5 into heap Saturday, August 30, 2014 92
  • 93. Insertion into a Max Heap void insert_max_heap(element item, int *n) { int i; if (HEAP_FULL(*n)) { fprintf(stderr, “the heap is full.n”); exit(1); } i = ++(*n); while ((i!=1)&&(item.key>heap[i/2].key)) { heap[i] = heap[i/2]; i /= 2; } heap[i]= item; Saturday, August 30, 2014 93 } 2k-1=n ==> k=log2(n+1) O(log2n)
  • 94. Example of Deletion from Max Heap 20 remove 15 2 14 10 10 15 2 14 15 14 2 10 Saturday, August 30, 2014 94
  • 95. Deletion from a Max Heap element delete_max_heap(int *n) { int parent, child; element item, temp; if (HEAP_EMPTY(*n)) { fprintf(stderr, “The heap is emptyn”); exit(1); } /* save value of the element with the highest key */ item = heap[1]; /* use last element in heap to adjust heap */ temp = heap[(*n)--]; parent = 1; child = 2; Saturday, August 30, 2014 95
  • 96. while (child <= *n) { /* find the larger child of the current parent */ if ((child < *n)&& (heap[child].key<heap[child+1].key)) child++; if (temp.key >= heap[child].key) break; /* move to the next lower level */ heap[parent] = heap[child]; child *= 2; } heap[parent] = temp; return item; } Saturday, August 30, 2014 96
  • 97. Thank You Contact @ Email: kuberchandra@yahoo.com Saturday, August 30, 2014 97