datastructures ppts prepared by m v brahmananda reddy
TRANSCRIPT
![Page 1: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/1.jpg)
DATA STRUCTURES ( C++ )
DATASTRUCTURES PROGRAMMING CONCEPTS
Developed by,
M.V.B.REDDY,CSE
Associate professor,
Dept. of CSE, GST,
GITAM UNIVERSITY.Email ID : [email protected]
![Page 2: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/2.jpg)
STACK USING ARRAYS
Let us take an array a[5] and take a variable top points to -1. PUSH:
To INSERT the element in to stack using top. Here we check for the OVERFLOW condition.
POP: To RETRIEVE elements from the stack using top. Here we check for the UNDERFLOW condition.
This concept is nothing but LIFO.
SOURCE CODE:/* Program To Implement Stack using Array */
#include < iostream.h >#include < conio.h >#include < stdlib.h >#define MAX 10
![Page 3: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/3.jpg)
class stack{private : int sp, a [ MAX ];public :void init ( );void push ( int );void pop ( );void display ( );void count ( );};void stack :: init ( ){sp = - 1;}void stack :: push ( int data){if (sp = = ( MAX – 1 ) ){cout<<"\n STACK OVERFLOW.......\n";return;}
![Page 4: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/4.jpg)
sp + + ;a [ sp ] = data;}void stack :: pop ( ){if ( sp < 0 ){cout<<"\n STACK UNDERFLOW.....\n";return;}cout<<"\n POPED DATA IS ::: "<<a[sp];sp - - ;}void stack :: display ( ){cout << "\n DATA PRESENT IN A STACK IS ::: \n";for ( int i = sp ; i > = 0 ; i - -)cout << a [ i ] <<"\t";}void stack :: count ( ){cout<<"\n NUMBER OF ELEMENTS IN A STACK ARE ::: "<<(sp+1);};
![Page 5: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/5.jpg)
void main ( ){stack ob;int data,ch;clrscr ( );ob.init ( );cout<<"\n**********STACK OPERATIONS**********\n";cout<<"\n1.Push Operation";cout<<"\n2.Pop Operation";cout<<"\n3.Display Operation";cout<<"\n4.Count Operation";cout<<"\n5.Exit Operation";cout<<"\n*************************************\n";do{cout<<"\n ENTER YOUR CHOICE :: ";cin>>ch;switch ( ch ){case 1:cout<<"\n ENTER ELEMENT TO BE INSERTED :::";cin>>data;ob.push ( data ); break;case 2: ob.pop ( ); break;case 3: ob.display ( ); break;case 4:ob.count ( ); break;case 5: exit ( 0 );defualt: cout<<"\nINVALID CHOICE ";}}while ( ch ! = 5 );getch ( );}
![Page 6: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/6.jpg)
OUTPUT:
![Page 7: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/7.jpg)
STACK USING LINKED LIST
We will create a linked list and insert an element ‘10’ and address as ‘0’.using top for the first node.
For second node insert data element ‘20’ and insert first node address at second node address field.
For third node insert data element ‘30’ and insert second node address at third node address field . after thirty we will stop the process .
If we want to print the elements 30,20,10 will be displayed, Thiss follows LIFO conceot.
![Page 8: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/8.jpg)
Source code:
#include<conio.h>#include<iostream.h>class st{ public: struct node { int data; struct node *next; }*start,*temp,*top; st() { start=temp=top=NULL; }void create(){ int d; cout<<"Enter data"; cin>>d; if(start==NULL) { start=new node; start->data=d;
![Page 9: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/9.jpg)
start->next=NULL; top=start; } else { temp=new node; temp->data=d; temp->next=top; top=temp; }}void disp(){ while(top!=NULL) { cout<<top->data<<"\t"; top=top->next; }}};void main(){ st ob; int ch; clrscr();
![Page 10: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/10.jpg)
while(ch) { cout<<"Enter ur choice"; cout<<"0 STOP\n1 CREATE\n 2 READ"; cin>>ch; if(ch==1) ob.create(); else if(ch==2) ob.disp(); }}
OUTPUT:
![Page 11: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/11.jpg)
QUEUE USING ARRAYS
Here we will take an array a[5],and two variables front, rear points to -1. WRITE:
Here will insert the element into the queue using rear variable. Here check for the Overflow condition.
READ: Here we will retrieve the elements from the queue using front variable. Here check for the Underflow condition.
This follows the FIFO concept.
0 1 2 3 4-1
rear
front
![Page 12: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/12.jpg)
SOURCE CODE:/* Program To Implement Queue using Array */
#include< iostream.h >#include< conio.h >#include< process.h >#define MAX 10class queue{private : int front, rear, a [ MAX ];public :void init ( );void write ( int );void read ( );void count ( );void display ( );};void queue :: init ( ){front = rear = - 1;}void queue :: write ( int data){if ( rear = = ( MAX - 1 ) )cout<<"\n QUEUE IS OVERFLOW......";elsea [ + + rear ] = data;}void queue :: read ( ){if( front = = rear )cout<<"\n QUEUE IS UNDERFLOW.....";elsecout<<"\n DELETED ELEMENT IN QUEUE IS :: "<<a[++front];}
![Page 13: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/13.jpg)
void queue :: count ( ){cout<<"\n NUMBER OF ELEMENTS IN A QUEUE ARE :: "<<(rear-front);}void queue :: display ( ){cout<<"\n ELEMENTS IN A QUEUE ARE:: ";for( int i = (front + 1); i < = rear; i + + )cout<< a [ i ]<<"\t";}void main ( ){queue ob; int ch,data;clrscr ( );ob.init ( );cout<<"\n*****QUEUE OPERATIONS****\n";cout<<"\n1.Write ";cout<<"\n2.Read ";cout<<"\n3.Count";cout<<"\n4.Display";cout<<"\n5.Exit";cout<<"**************************\n";
![Page 14: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/14.jpg)
do{cout<<"\n ENTER YOUR CHOICE :: ";cin>>ch;switch ( ch ){case 1:cout<<"\n ENTER ELEMENT TO BE INSERTED IN QUEUE :: ";cin>>data;ob.write ( data );break;case 2:ob.read ( );break;case 3:ob.count ( );break;case 4:ob.display ( );break;case 5:exit ( 0 );break;default :cout<<"\n INVALID CHOICE...";}}while( ch ! = 5 );getch ( );}
![Page 15: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/15.jpg)
OUTPUT:
![Page 16: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/16.jpg)
Queue using linked list Here we will create linked list with ‘n’ nodes one after another
10,20,30 etc. If we try to print the elements it will display as 10,20,30. which
follows FIFO concept.
![Page 17: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/17.jpg)
SOURCE CODE:/* Program To Implement Queue using Linked List */
#include < iostream.h >#include< conio.h >#include < alloc.h >#define NULL 0class node{int data;node *next;public:void create ( node *);void print ( node *);};void node :: create (node *list){cout<<"\n ENTER THE INPUT NO :: ";cout<<"\n TYPE 999 AT THE END :: ";cin>>list->data;if(list -> data = = 999)list->next = NULL;else{list -> next = new node;create( list -> next);}return;}
![Page 18: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/18.jpg)
void node :: print (node *list){if( list -> next ! = 0){cout<< list->data;cout<<"->";}elsereturn;print( list -> next);}void main ( ){node *head, ob;clrscr ( );head = new node;ob.create ( head );cout<<"\n QUEUE ELEMENTS ARE:: ";ob.print( head );cout<<"999";getch ( );}
![Page 19: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/19.jpg)
OUTPUT:
![Page 20: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/20.jpg)
BINARY TREE USING RECURSION
A binary tree is a tree data structure in which each node has at most two children. Typically the child nodes are called left and right. Binary trees are commonly used to implement binary search trees and binary heaps.
Starting at the root of a binary tree, there are three main steps that can be performed and the order in which they are performed define the traversal type.
There are 3 types of traversals: 1. Pre-Order 2. In-Order 3. Post-Order
To traverse a non-empty binary tree in preorder, perform the following operations recursively at each node, starting with the root node:
1. Visit the root.2. Traverse the left sub tree.3. Traverse the right sub tree.
To traverse a non-empty binary tree in in order, perform the following operations recursively at each node, starting with the root node:
1. Traverse the left sub tree.2. Visit the root.3. Traverse the right sub tree.
To traverse a non-empty binary tree in post order, perform the following operations recursively at each node, starting with the root node:
1. Traverse the left sub tree.2. Traverse the right sub tree.3. Visit the root.
![Page 21: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/21.jpg)
15
7 22
BINARY TREE:
Preorder:- 15,7,22 will be displayed .
Post order:- 7,22,15 will be displayed .
In order:- 7,15,22 will be displayed .
![Page 22: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/22.jpg)
SOURCE CODE:/* Program To Implement Binary Tree Traversing */
#include < iostream.h >#include < conio.h >class bstree{ public: struct node { int data; node *left; node *right; }*head; void create (node *); void inorder (node *); void preorder (node *); void postorder (node *);};void* bstree:: create(node *list){ node *temp1,*temp2; int val; if(list = = NULL) { list = new node; cout<<"\nEnter Data Element:: "; cin>>list->data; list -> left = list -> right = NULL; } else
![Page 23: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/23.jpg)
{ cout<<"\n enter the data element"; cin>>val; temp1 = list; while( temp1 ! = NULL ) { temp2 = temp1; if(temp1 -> data > val)
temp1 = temp1 -> left; else temp1 = temp1 -> right; } if(temp2 -> data > val) { temp2 -> left = new node; temp2 = temp2 -> left; temp2 -> data = val; temp2 -> left = temp2 -> right = NULL; } else { temp2 -> right = new node; temp2 = temp2 -> right; temp2 -> data = val; temp2 -> left = temp2 -> right = NULL; } }return (list);}
![Page 24: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/24.jpg)
void bstree:: inorder(node *root){ if( ! root ) return; inorder( root -> left ); cout<<root->data<<"\t"; inorder( root -> right );}void bstree::preorder(node*root){
if( ! root )return;
cout<<root->data<<”\t”;preorder( root -> left );preorder( root -> right);
}void bstree::postorder(node*root){
if( ! root)return;
postorder( root -> left );postorder( root -> right );cout<<root->data<<”\t”;
}
![Page 25: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/25.jpg)
void main ( ){ node n,*head; head = NULL; clrscr ( ); cout<<"\nCreate A Binary Tree\n";head=n.create ( head ); cout<<"\n the inorder traversal gives the following nodes"; n.inorder ( head ); getch ( );}
OUTPUT:
![Page 26: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/26.jpg)
![Page 27: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/27.jpg)
BINARY SEARCH TREE15
7 22
A tree having left child less than parent and right child grater than the parent.
Traversals are same as binary tree.
![Page 28: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/28.jpg)
SOURCE CODE:/* Program to implement Binary search tree */
#include < iostream.h >#include < conio.h >class btree{
private :struct btreenode{
btreenode *leftchild ;int data ;btreenode *rightchild ;
} *root;public:
btree ( ) ;void buildtree ( int num ) ;static void insert ( btreenode **sr, int num ) ;void traverse ( ) ;static void inorder ( btreenode *sr ) ;static void preorder ( btreenode *sr ) ;static void postorder ( btreenode *sr ) ;static void del ( btreenode *sr ) ;~btree ( ) ;
} ;
![Page 29: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/29.jpg)
btree :: btree ( ){
root = NULL ;}void btree :: buildtree ( int num ){
insert ( &root, num ) ;}void btree :: insert ( btreenode **sr, int num ){
if ( *sr == NULL ){
*sr = new btreenode ;( *sr ) -> leftchild = NULL ;( *sr ) -> data = num ;( *sr ) -> rightchild = NULL ;return ;
}else // search the node to which new node will be attached{
// if new data is less, traverse to leftif ( num < ( *sr ) -> data )
insert ( & ( ( *sr ) -> leftchild ), num ) ;else
// else traverse to rightinsert ( & ( ( *sr ) -> rightchild ), num ) ;
}return ;
}
![Page 30: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/30.jpg)
void btree :: traverse( ){
cout << "\nIN - ORDER TRAVERSAL :: " ;inorder ( root ) ;cout << "\nPRE - ORDER TRAVERSAL :: " ;preorder ( root ) ;cout << "\nPOST - ORDER TRAVERSAL :: " ;postorder ( root ) ;
}void btree :: inorder ( btreenode *sr ){
if ( sr != NULL ){
inorder ( sr -> leftchild ) ;cout << "\t" << sr -> data ;inorder ( sr -> rightchild ) ;
}else
return ;}void btree :: preorder ( btreenode *sr ){
if ( sr != NULL ){
// print the data of a nodecout << "\t" << sr -> data ;// traverse till leftchild is not NULLpreorder ( sr -> leftchild ) ;// traverse till rightchild is not NULLpreorder ( sr -> rightchild ) ;
}
![Page 31: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/31.jpg)
elsereturn ;
}void btree :: postorder ( btreenode *sr ){
if ( sr != NULL ){
postorder ( sr -> leftchild ) ;postorder ( sr -> rightchild ) ;cout << "\t" << sr -> data ;
}else
return ;}btree :: ~btree( ){
del ( root ) ;}void btree :: del ( btreenode *sr ){
if ( sr != NULL ){
del ( sr -> leftchild ) ;del ( sr -> rightchild ) ;
}delete sr ;
}
![Page 32: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/32.jpg)
void main( ){
btree bt ;int req, i = 1, num ;clrscr();cout << "\n SPECIFY THE NUMBER OF ITEMS TO BE INSERTED :: " ;cin >> req ;while ( i + + <= req ){
cout << "\n ENTER THE DATA :: " ;cin >> num ;bt.buildtree ( num ) ;
} bt.traverse( ) ; getch();}
OUTPUT:
![Page 33: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/33.jpg)
SPARSE MATRIXAIM: Write a program in C++ to implement ADDITION and MULTIPLICTION of two SPARSE
matrixes.THEORY:
If a lot of elements from a matrix have a value 0 then the matrix is known as SPARSE MATRIX. If the matrix is sparse we must consider an alternate way of representing it rather the normal row major or column major arrangement. This is because if majority of elements of the matrix are 0 then an alternative through which we can store only the non-zero elements and keep intact the functionality of the matrix can save a lot of memory space.
Example:Sparse matrix of dimension 7 x 7. COLUMNS
0 1 2 3 4 5 6
0 0 0 0 -5 0 0 01 0 4 0 0 0 0 72 0 0 0 0 9 0 0
ROWS 3 0 3 0 2 0 0 04 1 0 2 0 0 0 05 0 0 0 0 0 0 06 0 0 8 0 0 0 0
![Page 34: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/34.jpg)
![Page 35: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/35.jpg)
SOURCE CODE:/*Program to demonstrate addition and multiplication of Two Sparse Matrix */#include < iostream.h >#include < conio.h >#define x 25class sparce{ private: int a [ x ] [ x ], b [ x ] [ x ], c [ x ] [ x ], m, n, p, q; public: void init ( ); void input ( ); void add ( ); void mul ( ); void display ( int [25][25], int, int ); void convert( int [25][25], int, int );};void sparce :: init ( ){ int i, j; for(i = 0; i < x;i + + ) for( j = 0; j < x; j + +) c [ i ] [ j ] = 0;}
![Page 36: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/36.jpg)
void sparce :: input(){ int i,j; cout<<"\nEnter order Of First matrix::"; cin>>m>>n; cout<<"\nEnter order Of Second matrix::"; cin>>p>>q; cout<<"\nEnter"<<m*n<<"Elements Into First Matrix\n"; for(i=0;i<m;i++) for( j = 0; j < n; j + + ) cin>> a[ i ] [ j ]; cout<<"\nEnter"<<p*q<<"Elements Into Second Matrix\n"; for(i = 0; i < p ; i + + ) for ( j = 0; j < q ; j + + ) cin>>b [ i ] [ j ];}void sparce :: add ( ){ int i, j; if( m = = p && n = = q ) { for( i = 0 ; i < m ; i + + ) for( j = 0; j < n; j + + ) c[ i ] [ j ] = a [ i ][ j ] + b [ i ] [ j ]; convert( c, m, n); } else cout<<"\nAddition Is Not Possible";}
![Page 37: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/37.jpg)
void sparce :: mul ( ){ int i, j, k; if(n = = p) { for( i = 0; i < m; i + +) for( j = 0; j < q; j + + ) for( k = 0; k < n; k + + )
c[ I ] [ j ] + = a [ I ] [ k ] * b [ k ] [ j ]; convert(c, m, n); } else cout<<"\n Multiplecation Is Not Possible";}void sparce :: display(int c[25][25], int m, int n){ int i,j; for( i = 0 ;i < m; i + + ) { for( j = 0 ; j < n ; j + + ) cout<<c [ i ] [ j ]<<"\t"; cout<<"\n"; }}
![Page 38: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/38.jpg)
void sparce :: convert(int c[25][25], int m, int n){ int i, j, k = 1,t = 0; int sp[25][25]; for( i = 0 ; i < m ; i + +) for( j = 0 ; j < n ; j + + ) if(c [ i ] [ j ] ! = 0 ) {sp [ k ] [ 0 ] = i;sp [ k ] [ 1 ] = j;sp [ k ] [ 2 ] = c [ i ] [ j ];k + + ;t + + ; }sp[ 0 ] [ 0 ] = m;sp[ 0 ] [ 1 ] = n;sp[ 0 ] [ 2 ] = t;display( sp, k, 3);}void main ( ){ sparce ob; clrscr ( ); ob.init ( ); ob.input ( ); cout<<"\nAddition of Two Sparce Matrix\n"; ob.add ( ); ob.init ( ); cout<<"\nMultiplecation Of Two Sparce Matrix\n"; ob.mul ( ); getch ( ); }
![Page 39: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/39.jpg)
OUTPUT:
![Page 40: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/40.jpg)
INFIX TO POSTFIX CONVERTIONic Suppose Q is an arithmetic expression written in infix notation. This algorithm
finds the equivalent postfix expression P. Step 1. Push “(“ onto stack and add “)” to the end of Q. 2. Scan Q from left to right and repeat step 3 to 6 for each element of
Q until the stack is empty. 3. If an operand is encountered , add it to p. 4. If a left parenthesis is encountered ,push it onto stack. 5 If an operator * is encountered , then:
a. repeatedly pop from stack and top each operator (on the top of stack ) which has the same precedence or higher precedence than * .
b. Add * to stack. 6. If a right parenthesis is encountered , then: a. repeatedly from stack and add to P each operator (on the top of
stack) until a left parenthesis is encountered. b. remove the left parenthesis [ Do not add the left parenthesis top]
[End of if structure] [End of step 2 loop] 7. Exit
![Page 41: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/41.jpg)
(A+(B*C-(D/E^F)*G)*H)
Symbol scanned stack Expression P1 A ( A2 + ( + A3 ( ( + ( A4 B ( + ( AB5 * ( + ( * AB6 C ( + ( * ABC7 - ( + ( - ABC*8 ( ( + ( - ( ABC*9 D ( + ( - ( ABC*D10 / ( + ( - ( / ABC*D11 E ( + ( - ( / ABC*DE12 ^ ( + ( - ( / ^ ABC*DE13 F ( + ( - ( / ^ ABC*DEF14 ) ( + ( - ABC*DEF^/15 * ( + ( - * ABC*DEF^/16 G ( + ( - * ABC*DEF^/G17 ) ( + ABC*DEF^/G*-18 * ( + * ABC*DEF^/G*-19 H ( + * ABC*DEF^/G*-H20 ) ABC*DEF^/G*-H*+
![Page 42: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/42.jpg)
SOURCE CODE:/* Program To implement infix to postfix Expression */
#include < iostream.h >#include< process.h >#include < conio.h >char stack[30], postfix[30], infix[30];int top = - 1;int pri( char x ){int value;switch ( x ){case ')': value=0; break;case '+': case '-': value=1; break;case '*': case '/': case '%': value=2; break;case '^': value=3; break;case '(': value=4; break;default: cout<<"INVALID EXPRESSION !!!!!!";
exit(1);}return value;}
![Page 43: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/43.jpg)
void push ( char x ){top = top + 1;stack [top] = x;}char stacktop ( ){return stack [ top ];}int isalnum (char x){return ( (x>='0' && x<='9') ||( x>='a' && x<='z') || ( x>='A' && x<='Z'));}char pop( ){return stack[top - - ];}
![Page 44: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/44.jpg)
void intopost(char infix[ ], char postfix[ ]){int i, j=0;char c, pc;for ( i = 0; ( c = infix[ i ] ) != '\0' ; i + +){if ( isalnum (c) ) postfix [ j + + ] = c;else{while ( top ! = - 1 && (pri (stacktop () ) >= pri (c) ) ){ If ( stacktop( ) = = '(' && c! = ')' ) break; if ( stacktop( ) = = '(' && c = =')' ){pop () ;break;}pc = pop( );if ( pc! = '(' ) postfix [ j + + ] = pc;else break; }if( c! = ')' )push ( c );}}while( top ! = -1 )postfix[ j + + ] = pop( );postfix [ j ] = '\0';}
![Page 45: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/45.jpg)
void main ( ){clrscr ( );cout<<"ENTER INFIX EXPRESSION ::\n\n\t\t\t";cin>>infix;intopost( infix, postfix );cout<<"POSTFIX EXPRESSION ::\n\n\t\t\t ";cout<<postfix;getch ( );}
OUTPUT:
![Page 46: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/46.jpg)
POSTFIX EVALUATIONTHEORY:Reverse Polish notation is a mathematical notation wherein every operator
follows all of its operands. It is also known as Postfix notation and is parenthesis free.In Reverse Polish notation the operators follow their operands; for instance, to add three
and four, one would write “3 4 +” rather than “3 + 4”. If there are multiple operations, the operator is given immediately after its second operand; so the expression written “3 − 4 + 5” in conventional infix notation would be written “3 4 − 5 +” in RPN: first subtract 4 from 3, then add 5 to that.
Infix Expression: Any expression in the standard form like "2*3-4/5" is an Infix(In order) expression. Postfix Expression: The Postfix(Post order) form of the above expression is "23*45/-".
Postfix Evaluation: In normal algebra we use the infix notation like a+b*c. The corresponding postfix notation is abc*+. The algorithm for the conversion is as follows:
•Scan the Postfix string from left to right.•Initialize an empty stack. •If the scanned character is an operand, add it to the stack. If the scanned character is an
operator, there will be at least two operands in the stackIf the scanned character is an Operator, then we store the top most element of the stack(topStack) in a variable temp. Pop the stack. Now evaluate topStack(Operator)temp. Let the result of this operation be retVal. Pop the stack and Push retVal into the stack.Repeat this step till all the characters are scanned.
•After all characters are scanned, we will have only one element in the stack. Return topStack.
•
![Page 47: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/47.jpg)
Stack Expression
Example:Postfix String: 1 2 3 * + 4 - .Initially the Stack is empty. Now, the first three characters scanned are 1,2 and 3, which are operands. Thus they will be pushed into the stack in that order.
Next character scanned is "*", which is an operator. Thus, we pop the top two elements from the stack and perform the "*" operation with the two operands. The second operand will be the first element that is popped.
The value of the expression(2*3) that has been evaluated(6) is pushed into the stack.Stack Expression
Stack Expression
![Page 48: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/48.jpg)
Stack Expression
Next character scanned is "+", which is an operator. Thus, we pop the top two elements from the stack and perform the "+" operation with the two operands. The second operand will be the first element that is popped.
The value of the expression(1+6) that has been evaluated(7) is pushed into the stack.
Next character scanned is "4", which is added to the stack.
Next character scanned is "-", which is an operator. Thus, we pop the top two elements from the stack and perform the "-" operation with the two operands. The second operand will be the first element that is popped.
Stack Expression
Stack Expression
![Page 49: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/49.jpg)
Stack Expression
The value of the expression(7-4) that has been evaluated(3) is pushed into the stack.
The value of the expression(7-4) that has been evaluated(3) is pushed into the stack.
Now, since all the characters are scanned, the remaining element in the stack (there will be only one element in the stack) will be returned.
End result:
Postfix String : 1 2 3 * + 4 - Result : 3
Stack Expression
![Page 50: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/50.jpg)
SOURCE CODE:/*Program To Evaluate Postfix Expression */#include < iostream.h >#include < conio.h >#include < math.h >#include < string.h >class postfix{ private: int stack[50], len, top; char post[50]; public: postfix ( ); void push ( int ); int pop ( ); int pfix ( );};void postfix :: postfix ( ){ top = - 1;}int postfix :: pfix ( ){ int a, b, i, temp; cout<<"\nEnter Postfix Expression::"; cin>>post; len = strlen ( post ); post [ len] = '#';
![Page 51: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/51.jpg)
for( i = 0 ; post [ i ] ! = '#' ; i + +) { if( post [ i ] <= '9' && post [ i ] >= '0') push( post [ i ] - 48); else { a = pop ( ); b = pop ( ); switch ( post [ i ]) { case '+': temp = b + a; break; case '-': temp = b - a; break;case '*': temp = b * a; break; case '/': temp = b/a; break; case '%': temp = b%a; break; case '^': temp = pow( b, a ); } push ( temp ); } } return( pop ( ) );}
![Page 52: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/52.jpg)
void postfix :: push( int x ){ stack[ + + top ] = x;}int postfix :: pop ( ){ int x = stack [ top ]; top- -; return x;}void main ( ){ int x; postfix ob; clrscr ( ); x=ob.pfix ( ); cout<<"\nResult Of Postfix Expression Is\t"<<x; getch ( );}
OUTPUT:
![Page 53: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/53.jpg)
Quick Sort
11 7 21 3 46 89 2 34 right
1)When pivot is at left end, 1)Compare a[pivot] with a[right] element if (a[pivot] < a[right]) then right-- else swap a[pivot] and a[right] 2)When pivot is at right end, Compare a[pivot] with a[left] element if (a[left] < a[pivot]) then left++ else swap a[left] and a[pivot]
pivot
left
![Page 54: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/54.jpg)
STEP1: 11 7 21 3 46 89 2 34 left, pivot right
STEP2: 2 7 21 3 46 89 11 34 left right, pivot
STEP3: 2 7 21 3 46 89 11 34 left right, pivot
STEP4: 2 7 21 3 46 89 11 34 left right, pivot
STEP5: 2 7 11 3 46 89 21 34 left, pivot right
STEP6: 2 7 11 3 46 89 21 34 left, pivot right
![Page 55: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/55.jpg)
STEP7: 2 7 11 3 46 89 21 34 left, pivot right
STEP8: 2 7 11 3 46 89 21 34 left, pivot right
STEP9: 2 7 3 11 46 89 21 34 left right, pivot
STEP10: 2 7 3 11 46 89 21 34 left, right, pivot
Here we will stop the main process as the left and right pointers are equal. Now see the elements left to ‘11’ are less than ‘11’ and elements right to ‘11’ are
grater than ‘11’. Now divide the main list into 2 sub lists such as(2,7,3) and (46,89,21,34) and do the
same above process.
![Page 56: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/56.jpg)
Source code
#include<stdio.h> #include<conio.h> #define MAXSIZE 500
void quickSort(int elements[], int maxsize);void sort(int elements[], int left, int right);
int elements[MAXSIZE];
int main(){int i, maxsize;printf(“\nHow many elements you want to sort: “);scanf(“%d”,&maxsize);printf(“\nEnter the values one by one: “);for (i = 0; i < maxsize; i++){printf (“\nEnter element %i :”,i);scanf(“%d”,&elements[i]);}
![Page 57: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/57.jpg)
printf(“\nArray before sorting:\n”);for (i = 0; i < maxsize; i++)printf(“[%i], “,elements[i]);printf (“\n”);quickSort(elements, maxsize);printf(“\nArray after sorting:\n”);for (i = 0; i < maxsize; i++)printf(“[%i], “, elements[i]);}void quickSort(int elements[], int maxsize){sort(elements, 0, maxsize - 1);}void sort(int elements[], int left, int right){int pivot, l, r;l = left;r = right;pivot = elements[left];while (left < right){while ((elements[right] >= pivot) && (left < right))right—;
![Page 58: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/58.jpg)
if (left != right){elements[left] = elements[right];left++;}while ((elements[left] <= pivot) && (left < right))left++;if (left != right){elements[right] = elements[left];right—;}}elements[left] = pivot;pivot = left;left = l;right = r;if (left < pivot)sort(elements, left, pivot - 1);if (right > pivot)sort(elements, pivot + 1, right);}
![Page 59: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/59.jpg)
Selection sort
Consider the elements as shown, 77 33 44 11 88 22 66
55
min i Here min is compared with a[1]
as min is > a[1] min=a[1]
min i This min is compared with a[2] ,as this is < a[2]
min is same that is 33 This min is compared with a[3] ,as this is > a[3]
min =a[3].
min I Now this is compared with a[4],a[5],a[6],a[7] as min is less than all of
these min remains 33 At last swap min and a[i] like this continue the process with
i=1,2,3……
77 0
33 0
11 0
![Page 60: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/60.jpg)
SOURCE CODE:#include < iostream.h >#include < conio.h >class selsort{public : void sort(int *, int);};void selsort::sort(int *a, int n){
int i, j, x, min, temp;for( i = 0 ; i < ( n – 1 ) ; i + + ){x = i; min = a [ i ];for( j = i + 1; j < n; j + + ){if( min > a [ j ] ){min = a [ j ];x = j;}}temp = a [ i ] ; a [ i ] = a [ x ]; a [ x ] = temp;}}void main( ){int a[50], n, i;clrscr( );
![Page 61: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/61.jpg)
cout<<"\n ENTER THE SIZE OF THE ARRAY: \n\t ";cin>>n;cout<<"\n ENTER THE ELEMENTS:\n\t";for( i = 0 ;i < n ;i + + )cin>>a [ i ];cout<<"\n ELEMENTS BEFORE SORTING:\n\t";for( i = 0 ; i < n ; i + + )cout<<a[i]<<"\t";selsort obj; obj.sort(a,n);cout<<"\n ELEMENTS AFTER SORTING ARE:\n\t";for( i = 0 ; i < n ; i + + )cout<<a[i]<<"\t";getch();}
OUTPUT:
![Page 62: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/62.jpg)
10 20 30 40 50 60 70
LINEAR SEARCH
0 1 2 3 4 5 6
•Here we want to search for ‘50’.• So compare ’50’ with a[i] where i=0,1,2,3,….
If (a[i]==50)Then element is found at location i that is 4Else i++
•Here the time complexity is O(n).
![Page 63: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/63.jpg)
SOURCE CODE:#include < iostream.h >#include < conio.h >class lsearch{
private:int a[50], n, count, key;
public:void init ( );void linear ( );
};void lsearch::init ( ){
count = 0;}void lsearch::linear ( ){
int i;clrscr ( );cout<<"\nENTER SIZE OF AN ARRAY :: ";cin>>n;cout<<"\n\nENTER "<<n<<" ELEMENTS INTO AN ARRAY ::";for( i = 0; i < n; i + +)cin>> a [ i ];cout<<"\n\nENTER SEARCH ELEMENT :: ";cin>>key;cout<<"\n\nELEMENTS IN ARRAY ARE :\n";
![Page 64: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/64.jpg)
for( i = 0; i < n; i + +)cout<< a [ i ]<<"\t";for( i = 0; i < n; i + + ) if(a [ i ] = = key){
count + +;break;
}if( count = = 1 )cout<<"\n\n ELEMENT IS FOUND IN
"<< ( i + 1)<<" LOCATION";elsecout<<"\nELEMENT IS NOT
FOUND....";}void main ( ){
lsearch ob;clrscr ( );ob.init ();ob.linear ( );getch ( );
}
![Page 65: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/65.jpg)
OUTPUT:
![Page 66: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/66.jpg)
BINARY SEARCH
•Here elements must be in Ascending/Descending order.•Consider the elements in ascending order711 15 23 46 64 71 83
low high here low=0 and high=7Then calculate mid=(low+high)/2•Let us search for k=71•If (a[mid]==k) then element is found at ‘mid’ location•If(k<a[mid]) then high=mid-1 else low=mid+1•Repeat the previous steps tell low and high are equal.
![Page 67: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/67.jpg)
SOURCE CODE:/*Program To Implement Binary Search */#include < iostream.h >#include < conio.h >class bsearch{
private : int a[50], n , x;
public : void binary ( );
};void bsearch::binary ( ){
int i, j, temp, mid, beg, end;beg = 0;cout<<"\n\nENTER THE SIZE OF THE ARRAY :: ";cin>>n;end = n - 1;cout<<"\n\nENTER THE ELEMENTS OF THE ARRAY :: ";for( i = 0; i < n; i + +)cin>>a[i];cout<<"\n\nELEMENTS BEFORE BEFORE SORTING ARE :: ";for( i = 0; i < n; i + + )cout<< a [ i ]<<" ";
![Page 68: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/68.jpg)
for( i = 0; i < n; i + + ){
for( j = i + 1; j < n; j + +){
if( a[ i ] > a[ j ] ){
temp = a [ i ];a[ i ] = a[ j ];a[ j ] = temp;
}}
}cout<<"\n\nELEMENTS AFTER SORTING ARE :: ";for( i = 0; i < n; i + + )cout<<a[ i ]<<" ";cout<<"\n\nENTER THE ELEMENT TO BE SEARCHED :: ";cin>>x;while ( beg < = end ){
mid = ( beg + end ) / 2;if ( a [ mid ] = = x ){
![Page 69: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/69.jpg)
cout<<"\nSEARCHING IS SUCCESSFUL AND THE ELEMENTS IS PRESENT AT "<< ( mid + 1 )<<" LOCATION";
return;}else if(x<a[mid])
end = mid - 1;else beg = mid + 1;
} cout<<"\n SEARCH IS UNSUCCESSFUL";
}void main ( ){
bsearch obj; clrscr ( ); obj . binary ( ); getch ( );
}OUTPUT:
![Page 70: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/70.jpg)
POLINOMIAL ADDITION AND MULTIPLICATION
•1 expression: 3x2+2x+1 Store all the coefficients 1,2,3 into an array1.•1 expression: 2x2+1x+2 Store all the coefficients 2,1,2 into an array2.ADDITION: 3x2+2x+1 2x2+1x+2 5x2+3x+3Store the result expression coefficients in array3
![Page 71: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/71.jpg)
SOURCE CODE:/*Program To Demonstrate Addition And Multiplication Of Two Polynomial Expression */#include < iostream.h >#include < conio.h >#define n 100class poly{ private: int a[n], b[n], add[n], mul[n], p, q, at; public: void init ( );void input ( ); void process ( ); void display ( );};void poly :: init ( ){ int i; for( i = 0; i < n; i + + ) a[ i ] = b [ i ] = add[ i ] = mul[ i ] = 0;}
![Page 72: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/72.jpg)
void poly :: input ( ){ int i;cout<<"\nEnter Degree Of First Polynomial::"; cin>>p; cout<<"\nEnter Degree Of Second Polynomial::"; cin>>q; cout<<"\nEnter Values First Polynomial\n"; for( i = 0; i <= p; i + + ) { cout<<"\nEnter X^"<<i<<" Th Coefficient"; cin>>a[ i ]; } cout<<"\nEnter Values First Polynomial\n"; for( i = 0; i <= q; i + + ) { cout<<"\nEnter X^"<<i<<" Th Coefficient"; cin>>b[ i ]; }}
![Page 73: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/73.jpg)
void poly :: process ( ){ int i, j; if( p > q ) at = p; else at = q; for ( i = 0; i <= at; i + +) add[ i ] = a[ i ] + b[ i ]; for( i = 0; i <= p; i + + ) for( j = 0; j <= q; j + + ) mul [ i + j ] + = a [ i ] * b [ j ];}void poly :: display ( ){ int i;cout<<"\Addition Of Two Polynomial Expressions Are\n\n";for( i = at; i >=0 ; i - -)cout<<add[i]<<"X^"<<i<<"+";cout<<"\n\nMultiplecation Of Two Polynomial Expressions Are\n\n";for( i = p + q; i > = 0; i - -)cout<<mul[i]<<"X^"<< i <<"+";}
![Page 74: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/74.jpg)
void main(){poly ob;clrscr ( );ob.init ( );ob.input ( );ob.process ( );ob.display ( );getch ( );}
OUTPUT:
![Page 75: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/75.jpg)
SINGLE LINKED LIST
THEORY:Figure shows a Linked List. Each item in the list is called a node and contain two fields, a data
field and a next address field. The data field holds the actual element on the list. The next address field contains the address of the next node in the list. Such an address which is used to access a particular node, is known as a pointer. The entire linked list is accesses from an external pointer list, that points to the first node in the list. The next field of last node in the list contains a special value, known as NULL. The null pointer is used to signal the end of the list.
The singly-linked list is the most basic of all the linked data structures. A singly-linked list is simply a sequence of dynamically allocated objects, each of which refers to its successor in the list. Despite this obvious simplicity, there are myriad implementation variations.
The following code inserts a node after an existing node in a singly linked list. The diagram shows how it works. Inserting a node before an existing one cannot be done; instead, you have to locate it while keeping track of the previous node.
![Page 76: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/76.jpg)
Similarly, we have functions for removing the node after a given node, and for removing a node from the beginning of the list. The diagram demonstrates the former. To find and remove a particular node, one must again keep track of the previous element.
![Page 77: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/77.jpg)
SOURCE CODE:/*Program To Implement Single Linked list */#include< stdio.h >#include < iostream.h >#include < conio.h >#include < process.h >#include< alloc.h >class slist{
private:struct list{int data;struct list *next;}*start,*temp,*curr,*add,*tem,*addr;
public:void init ( );void create ( );void disp ( );list *search ( int );void insert ( );void del ( );
};
![Page 78: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/78.jpg)
void slist :: init ( ){start = temp = curr = NULL;}void slist::create ( ){
char ch;temp = new list;cout<<"\n ENTER THE DATA TO BE STORED \n";cin>> temp->data;temp->next = NULL;start = curr = temp;cout<<"\n DO YOU WANT TO INSERT ANOTHER NODE (Y/N)";cin>>ch;while( ch = = 'y' ){
temp = new list;cout<<"\n ENTER DATA TO BE STORED:\n";cin>>temp->data;temp->next = NULL;curr->next = temp;curr = temp;cout<<"\n DO YOU WANT TO INSERT ANOTHER NODE (Y/N):";cin>>ch;
}}
![Page 79: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/79.jpg)
void slist :: disp ( ){
if( start = = NULL)cout<<"\n LIST IS EMPTY";else{
cout<<"\n DATA PRESENT IN A LIST IS \n";temp = start;while( temp -> next ! = NULL){
cout<<"|"<<temp->data<<"|"<<temp->next<<"|-->";temp = temp -> next;
}cout<<"|"<<temp->data<<"|"<<temp->next<<"|";
}}slist::list *slist :: search( int key){
temp = start;while( temp -> next ! = NULL){
if( temp->data = = key )return temp;elsetemp = temp->next;
}if( temp->next = = NULL )
![Page 80: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/80.jpg)
if( temp->data = = key )return temp;elsereturn NULL;
}void slist:: insert ( ){
int key;cout<<"\n ENTER DATA AFTER WHICH WE CAN INSERT NEW NODE:";cin>>key;add=search(key);if( add = = NULL )
cout<<"\n NODE IS NOT FOUND";else{
temp = new list;cout<<"\n ENTER INSERTED ELEMENT";cin>>temp->data;if( add->next = = NULL){
temp->next = NULL;add->next = temp;curr = temp;
}
![Page 81: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/81.jpg)
else{
addr = add->next;add->next = temp;temp->next = addr;
} }}void slist :: del ( ){
int key;cout<<"\n ENTER NODE DATA SHOULD BE DELETE:\n";cin>>key;add = search ( key );if( add = = NULL )cout<<"\n NODE IS NOT FOUND\n";elseif( curr = = add ){
curr = start;while( curr->next ! = NULL){
temp = curr;curr = curr->next;
}
![Page 82: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/82.jpg)
free ( curr );curr = temp;curr->next = NULL;
}elseif( start = = add ){
temp = start;start = start->next;free( temp );
}else{tem = add->next;temp = start;while( temp-> next ! = add)temp = temp->next;temp->next = tem;free( add );}
}void main ( ){slist ob;int key, ch;list *temp;clrscr ( );cout<<"\n * * * SINGLE LINKED LIST OPERATION * * * \n";
![Page 83: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/83.jpg)
cout<<"\n 1. CREATE \n 2. DISPLAY \n 3. INSERT \n 4. DELETE \n 5. SEARCH \n 6.EXIT \n";cout<<"\n *************************\n";do{
cout<<"\n ENTER YOUR CHOICE \n";cin>>ch;switch ( ch ){
case 1: ob.create ( );break;case 2: ob.disp ( );break;case 3: ob.insert ( );break;case 4: ob.del ( );break;case 5: cout<<"\n ENTER THE ELEMENT TO SEARCH";
cin>>key;temp=ob.search(key);if( temp = = NULL)cout<<"\n ELEMENT IS NOT FOUND \n";elsecout<<"\n ELEMENT IS FOUND \n";break;case 6: exit(0);default: cout<<"\n INVALID CHOICE \n";
}}while( ch ! = 0 );getch ( );}
![Page 84: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/84.jpg)
OUTPUT:
![Page 85: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/85.jpg)
SINGLE CIRCULAR LINKED LIST
THEORY:The linked list that we have seen so far is often know as linear lists. The elements of such
a linked list can be accessed, first by setting up a pointer pointing to the first node in the list and then traversing the entire list using this pointer. Although a linear linked list is a useful data structure, it has several shortcomings.
![Page 86: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/86.jpg)
SOURCE CODE:/* Program to implement single circular linked list */
#include<iostream.h>#include<conio.h>#include<process.h>#include<alloc.h>class clist{
private:struct list{ int data; struct list *next;}*start,*temp,*curr,*add,*tem,*addr;
public:void init(); void creat();void display(); list *search(int);void insert(); void del();
};void clist::init(){
start=temp=curr=NULL;}
![Page 87: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/87.jpg)
void clist::creat(){
char ch;temp=new list;cout<<"\n ENTER ENTER DATA TO BE STORED ::";cin>>temp->data;cout<<"\nADDRESS OF STARTING NODE :: "<<temp;temp->next=start;start=curr=temp;cout<<"\nDO YOU WANT TO INSERT ANOTHER NODE (y/n) :: ";cin>>ch;while(ch=='y'){
temp=new list;cout<<"\n ENTER DATA TO BE STORED :: ";cin>>temp->data;temp->next=start;curr->next=temp;curr=temp;cout<<"\nDO YOU WANT TO INSERT ANOTHER NODE (y/n) :: ";cin>>ch;
}}
![Page 88: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/88.jpg)
void clist::display(){
if(start==NULL)cout<<"\nLIST IS EMPTY.....";
elsecout<<"\nDATA PRESENT IN A LIST IS :: \n";
temp=start;while(temp->next!=start){
cout<<"|"<<temp->data<<"|"<<temp->next<<"|-->";temp=temp->next;
}cout<<"|"<<temp->data<<"|"<<temp->next<<"|";
}clist::list *clist::search(int key){
temp=start;while(temp->next!=start){
if(temp->data==key) return temp;else temp=temp->next;
}
![Page 89: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/89.jpg)
if(temp->next==NULL){
if(temp->data==key) return temp;else return NULL;
}return NULL;
}void clist::insert(){
int key;cout<<"\n ENTER DATA AFTER WHICH WE CAN INSERTED NEW NODE ::
";cin>>key;add=search(key);if(add==NULL) cout<<"\n NODE IS NOT FOUND ....";else{
temp=new list;cout<<"\n ENTER INSERTED ELEMENT :: ";cin>>temp->data;
![Page 90: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/90.jpg)
if(add->next==start){
temp->next=start;add->next=temp;curr=temp;
}else{
addr=add->next;add->next=temp;temp->next=addr;
}}
}void clist::del(){
int key;cout<<"\nEnter node to deleted:";cin>>key;add=search(key);if(add==NULL)cout<<"\nNode is not found";else if(curr==add)
![Page 91: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/91.jpg)
{curr=start;while(curr->next!=start){
temp=curr;curr=curr->next;
}free(curr);curr=temp;curr->next=start;
}else if(start==add){
temp=start;start=start->next;free(temp);
}else{
tem=add->next;temp=start;while(temp->next!=add) temp=temp->next;temp->next=tem;free(add);
}}
![Page 92: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/92.jpg)
void main(){
clist ob;int key,ch;clist::list *temp;clrscr();cout<<"\nCIRCULAR LINKED LIST \n";cout<<"\n1.Create\n2.Display\n3.Insert\n4.Delete\n5.Search\n6.Exit\n";do{
cout<<"\nEnter your choice";cin>>ch;switch(ch){
case 1:ob.creat(); break;case 2:ob.display(); break;case 3:ob.insert(); break;case 4:ob.del(); break;
![Page 93: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/93.jpg)
case 5:cout<<"\nEnter search element"; cin>>key; temp=ob.search(key); if(temp==NULL)
cout<<"\nElement is not found"; else
cout<<"\nElement is found"; break;case 6:exit(0);default:cout<<"Invalid choice";
}}while(ch!=6);getch();
}
![Page 94: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/94.jpg)
OUTPUT:
![Page 95: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/95.jpg)
DOUBLE LINKED LISTAIM: Write a program in C++ to implement DOUBLE LINKED LISTTHEORY:A two-way list is a linear collection of data elements, called nodes, where each node N is
divided into three parts:•An item data field.•A pointer field next which contains the location of the next node in the list.•A pointer field prev which contains the location of the previous node in the list.The list requires two list pointer variables: FIRST, which points to the first node in the list, and
LAST, which points to the last node in the list. The figure contains a schematic diagram of such a list. Observe that the null pointer appears in the next field of the last node in the list and also in the prev field of the first node in the list. Observe that, using the variable FIRST and the pointer field next, we can traverse a two-way list in the forward direction as before. On the other hand, using the variable LAST and the pointer field prev, we can also traverse the list in the backward direction.
![Page 96: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/96.jpg)
OPERATION ON TWO-WAY LISTS:1. Traversing. 2. Searching.3. Deleting
4Inserting
![Page 97: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/97.jpg)
SOURCE CODE:/* Program to implement Double linked list */#include<iostream.h>#include<conio.h>#include<process.h>#include<alloc.h>class dlist{
private:struct list{
int data;struct list *next,*prev;
}*start,*temp,*curr,*add,*addr,*tem;public:
void init();void creat(); void display();list *search(int);void insert(); void del();
};void dlist::init(){
start=temp=curr=NULL;}
![Page 98: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/98.jpg)
void dlist::creat(){
char ch;temp=new list;cout<<"\nENTER DATA TO BE STORED :: ";cin>>temp->data;cout<<"\n STARTING NODE ADDRESS :: "<<temp<<"\n";temp->next=NULL;temp->prev=NULL;start=curr=temp;cout<<"\n DO YOU WANT TO INSERT ANOTHER NODE
(y/n) :: ";cin>>ch;while(ch=='y'){
temp=new list;cout<<"\nENTER DATA TO BE STORED :: ";cin>>temp->data;temp->next=NULL;temp->prev=curr; curr->next=temp;curr=temp;cout<<"\nDO YOU WANT TO INSERT ANOTHER
NODE (y/n) :: ";cin>>ch;
}
}
![Page 99: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/99.jpg)
void dlist::display(){
if(start==NULL) cout<<"\n LIST IS EMPTY....";else{
cout<<"\n DATA PRESENT IN A LIST\n:::";temp=start;while(temp->next!=NULL){
cout<<"|"<<temp->prev<<"|"<<temp->data<<"|"<<temp->next<<"|-->";
temp=temp->next;}cout<<"|"<<temp->prev<<"|"<<temp->data<<"|"<<temp->next<<"|";
}}dlist::list *dlist::search(int key){
temp=start;while(temp->next!=NULL){
if(temp->data==key)
![Page 100: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/100.jpg)
return temp;else temp=temp->next;
}if(temp->next==NULL){ if(temp->data==key)
return temp; else
return NULL;}return NULL;
}void dlist::insert(){
int key;cout<<"\nENTER DATA AFTER WHICH WE CAN INSERT A
NEW NODE :: ";cin>>key;add=search(key);if(add==NULL) cout<<"\n NODE IS NOT FOUND.....";else tem=new list;
![Page 101: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/101.jpg)
cout<<"\n ENTER ELEMENT TO BE SEARCHED :: ";cin>>tem->data;if(add->next==NULL){
tem->next=NULL;tem->prev=add;add->next=tem;curr=tem;
}else{
addr=add->next;add->next=tem;tem->next=addr;tem->prev=add;
}}void dlist::del(){
int key;cout<<"\n ENTER NODE DATA TO BE DELETED :: ";cin>>key;add=search(key);if(add==NULL) cout<<"\n NODE IS NOT FOUND :: ";else
![Page 102: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/102.jpg)
if(curr==add) {
curr=start; while(curr->next!=NULL) {
temp=curr;curr=curr->next;
} free(curr); curr=temp; curr->next=NULL;
} else if(start==NULL) {
temp=start;start=start->next;free(temp);
} else {
tem=add->next;temp=start;while(temp->next!=add)temp=temp->next;temp->next=tem;free(add);
}}
![Page 103: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/103.jpg)
void main(){
dlist ob;int key,ch;dlist::list *temp;clrscr();cout<<"**********DOUBLE LINKED LIST**********";cout<<"\n1.Create\n2.Display\n3.Insert\n4.Delete\n5.Search\n6.Exit\n";do{
cout<<"\nENTER YOUR CHOICE :: ";cin>>ch;switch(ch){
case 1:ob.creat(); break;case 2:ob.display(); break;case 3:ob.insert(); break;case 4:ob.del(); break;
![Page 104: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/104.jpg)
case 5:cout<<"\n ENTER SEARCH ELEMENT :: "; cin>>key; temp=ob.search(key); if(temp==NULL)
cout<<"\n ELEMENT IS NOT FOUND...."; else
cout<<"\n ELEMENT IS FOUND....."; break;case 6:exit(0);default:cout<<"\n INVALID CHOICE....";
}}while(ch!=6);getch();
}
![Page 105: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/105.jpg)
OUTPUT:
![Page 106: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/106.jpg)
GRAPH TRAVERSING: DEPTH FIRST SEARCH
THEORY:
•DFS is an uninformed search that progresses by expanding the first child node of the search tree that appears and thus going deeper and deeper until a goal node is found, or until it hits a node that has no children. Then the search backtracks, returning to the most recent node it hadn't finished exploring. In a non-recursive implementation, all freshly expanded nodes are added to a LIFO stack for exploration.
•Space complexity of DFS is much lower than BFS (breadth-first search). It also lends itself much better to heuristic methods of choosing a likely-looking branch. Time complexity of both algorithms are proportional to the number of vertices plus the number of edges in the graphs they traverse (O(|V| + |E|)).
![Page 107: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/107.jpg)
SOURCE CODE:/*Program To Implement Depth First Search */#include < iostream.h >#include < conio.h >#define MAX 20class depth{
private: int a[MAX][MAX], visited[MAX];int n, top;
public: void init ( );void input ( );void dfs ( int );
};void depth::init ( ){ int i, j;
for( i = 0; i < MAX; i + + ){ visited[ i ] = 0;
for( j =0; j < MAX ; j + + )a[ i ] [ j ] = 0;
}top = - 1;
}void depth::input ( ){ int i, j;
cout<<"\nENTER NUMBER OF NODES IN A GRAPH :: ";
![Page 108: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/108.jpg)
cin>>n;cout<<"\nENTER ADJACENCY MATRIX FOR A GRAPH :: \n";for( i = 1; i <= n; i + +) for( j = 1; j <= n; j + + ) cin>>a[ i ][ j ];
}void depth::dfs ( int v){ int i;
visited[v] = 1;cout<<v<<"->";for( i = 1; i <= n; iI + + ) if( a [ v ] [ i ] = = 1 && visited [ i ] = = 0)
dfs ( i );}void main ( ){ depth ob;
int start;clrscr ( );ob.init ( );ob.input ( );cout<<"\nSTARTING NODE FOR DFS TRAVERSING :: ";cin>>start;cout<<"\nDEPTH FIRST SEARCH TRAVERSING IS ::\n\n";ob.dfs ( start );getch ( );
}
![Page 109: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/109.jpg)
OUTPUT:
![Page 110: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/110.jpg)
GRAPH TRAVERSING: BREADTH FIRST
THEORY:
•BFS is an uninformed search method that aims to expand and examine all nodes of a graph or combinations of sequence by systematically searching through every solution. In other words, it exhaustively searches the entire graph or sequence without considering the goal until it finds it.
•From the standpoint of the algorithm, all child nodes obtained by expanding a node are added to a FIFO queue. In typical implementations, nodes that have not yet been examined for their neighbors are placed in some container (such as a queue or linked list) called "open" and then once examined are placed in the container "closed".
Algorithm for Breadth First Search
1.Enqueue the root node. 2.Dequeue a node and examine it. •If the element sought is found in this node, quit the search and return a result. •Otherwise enqueue any successors (the direct child nodes) that have not yet been discovered. 3.If the queue is empty, every node on the graph has been examined – quit the search and
return "not found". 4.Repeat from Step 2.
![Page 111: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/111.jpg)
SOURCE CODE:/*Program To Implement Breadth First Search */#include < iostream.h >#include < conio.h >#define MAX 20class breadth{
private:int a[MAX][MAX], visited[MAX], queue[50];int n, front, rear;
public:void init ( );void input ( );void bfs ( );
};void breadth::init ( ){
int i, j;for( i = 0; i < MAX; i + + ){
visited [ i ] = 0;for( j = 0; j < MAX; j + + ) a[ i ] [ j ] = 0;
}front = rear = - 1;
}
![Page 112: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/112.jpg)
void breadth::input ( ){
int i, j;cout<<"\nENTER NUMBER OF NODES IN A GRAPH :: ";cin>>n;cout<<"\nENTER ADJACENCY MATRIX FOR A GRAPH :: \n";for( i = 1;i <= n; i + + ) for( j = 1; j <= n; j + + ) cin>>a[ i ][ j ];
}void breadth::bfs ( ){
int i, start;cout<<"\nSTARTING NODE FOR BFS TRAVERSING :: ";cin>>start;cout<<"\n BREADTH FIRST SEARCH TRAVERSING IS:: \n \t";cout<<start;visited[ start ] = 1;rear + +;front + +;queue[ rear ] = start;while(front <= rear){
start = queue[front];front + +;
![Page 113: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/113.jpg)
for( i =1; i <= n; i + + ){
if(a[ start ][ i ] = =1 && visited[ i ] = = 0){
cout<<"->"<<i;visited[ i ] =1;rear + +;queue [ rear ] = i;
}}
}}void main ( ){
breadth ob;int start;clrscr ( );ob.init ( );ob.input ( );ob.bfs ( );getch ( );
}
![Page 114: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/114.jpg)
OUTPUT:
![Page 115: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/115.jpg)
SHORTEST PATH FOR GRAPH
THEORY:
Shortest path is nothing but the path which lies between two nodes with the lowest cost. In a graph contain so many paths are existed between two nodes (source node to destination node) to choose the lowest cost path to reach from source node to destination node is nothing but shortest path algorithm. Shortest path algorithm was first proposed by E. W. DIJKSTRA.
SOURCE CODE:/*Program To Implement Shortest Path for Graph */#include < iostream.h >#include < conio.h >#define INF 9999 class stpath{
private:int i, j, k;
public:void spath(int [ ][20], int );void display(int [ ][20], int );
};
![Page 116: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/116.jpg)
void stpath::spath(int a[ ][20], int n){
for( i = 0 ;i < n; I + + ) for( j = 0; j < n; j + + ) if(a[ i ] [ j ] = = 0) a[ i ][ j ] = INF;cout<<"\nADJACENCY MATRIX OF COST OF EDGES ARE ::";display( a, n );for( k = 0; k < n; k + + ) for( i = 0; i < n; i + + ) for( j = 0; j < n; j + + ) if( a[ i ][ j ] > a[ i ] [ k] + a[ k ][ i ]) a[ i ][ j ] = a[ i ][ k ] + a[ k ][ j ];cout<<"\nADJACENCY MATRIX OF LOWEST COST OF EDGES ARE ::\n";display(a, n);
}void stpath::display(int a[ ] [20], int n){
for( i = 0; i < n; i + + ){
for( j = 0; j < n; j + + ) cout<<a[ i ][ j ]<<"\t";cout<<"\n";
}}
![Page 117: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/117.jpg)
void main(){
int i, j , n , a[20][20];stpath ob;clrscr();cout<<"\nENTER NUMBER OF NODES IN A GRAPH :: ";cin>>n;cout<<"\nENTER ADJACENCY MATRIX ::\n";for( i = 0; i < n; i + + ) for( j = 0; j < n; j + + ) {
cout<<"Enter "<<i+1<<" To "<<j+1<<" Node Distance";cin>>a[ i ] [ j ];
}ob.spath(a, n);getch ( );
}
![Page 118: DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY](https://reader037.vdocument.in/reader037/viewer/2022110119/55620a1ad8b42acb1e8b4684/html5/thumbnails/118.jpg)
OUTPUT: