Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 70

ADVANCED DATA STRUCTURES LAB MANUAL

1) Program to implement functions of Dictionary using Hashing.


AIM : Program to implement functions of Dictionary using Hashing.
PROGRAM :
#include<stdio.h>
#include<stdlib.h>
struct dict
{
int k;
int v;
}a[10];
int insert(int key,int value)
{
int h=0,i=0,j;
h=key%10;
if(a[h].k==-1)
{
a[h].k=key;
a[h].v=value;
return 1;
}
for(i=h+1;i<10;i++)
{
if(a[i].k==-1)
{
a[i].k=key;
a[i].v=value;
return 1;
}
}
for(j=0;j<h;j++)
{
if(a[j].k==-1)
{
a[j].k=key;
a[j].v=value;
return 1;
}
}
return -1;
}
Page 1 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

int delete(int key)


{
int h=0,i=0,j=0;
h=key%10;
if(a[h].k==key)
{
a[h].k=-1;
a[h].v=-1;
return 1;
}
for(i=h+1;i<10;i++)
{
if(a[i].k==key)
{
a[i].k=-1;
a[i].v=-1;
return 1;
}
}
for(j=0;j<h;j++)
{
if(a[j].k==key)
{
a[j].k=-1;
a[j].v=-1;
return 1;
}
}
return -1;
}
int search(int key)
{
int h=0,i,j;
h=key%10;
if(a[h].k==key)
{
printf("Value found at the index : %d value is : %d\n",h,a[h].v);
return 1;
}
for(i=h+1;i<10;i++)
{
Page 2 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

if(a[i].k==key)
{
printf("Value found at the index : %d value is : %d\n",h,a[h].v);
return 1;
}
}
for(j=0;j<h;j++)
{
if(a[j].k==key)
{
printf("Key found at the index : %d value is : %d\n",h,a[h].v);
return 1;
}
}
return -1;
}
void display()
{
int i;
printf(" Dictionary\n");
printf("---------------\n");
printf(" key | value \n");
for(i=0;i<10;i++)
{
printf("%3d | %5d\n",a[i].k,a[i].v);
}
}
int main()
{
int c,i,key,value,check;
for(i=0;i<10;i++)
{
a[i].k=-1;
a[i].v=-1;
}
while(1)
{
printf("1.Insert\n2.Delete\n3.Search\n4.Display\n5.Exit\n);
printf("Enter your choice : ");
scanf("%d",&c);
switch(c)
{
Page 3 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

case 1 : printf("Enter key :");


scanf("%d",&key);
printf("Enter value :");
scanf("%d",&value);
check=insert(key,value);
if(check<0)
{
printf("Over Flow...\n");
}
break;
case 2 : printf("Enter key :");
scanf("%d",&key);
check=delete(key);
if(check<0)
{
printf("Key not Found...\n");
}
break;
case 3 : printf("Enter key :");
scanf("%d",&key);
check=search(key);
if(check<0)
{
printf("Key not found...");
}
break;
case 4 : display();
break;
case 5 : return 0;
default : printf("Inavalid option choosen...\n Choose a valid option");
}
}
}

OUTPUT :
1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 1
Enter key : 45
Page 4 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

Enter value : 500

1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 1
Enter key : 98
Enter value : 800
1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 4
DICTIONARY
-------------------------Key
| value
-1
|
-1
-1
|
-1
-1
|
-1
-1
|
-1
-1
|
-1
45
|
500
-1
|
-1
-1
|
-1
98
|
800
-1
|
-1

1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 3
Enter key : 45
Key found at the index 5 and value is : 500

Page 5 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 2
Enter key : 45

1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 5

Page 6 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : Program to implement functions of Dictionary using Sorted Chain.


PROGRAM :
#include<stdio.h>
#include<stdlib.h>
struct dict
{
int k;
int v;
struct dict *next;
};
struct dict *first=NULL,*last=NULL,*temp,*prev,*newnode;
void insert(int key,int value)
{
newnode=(struct dict *)malloc(sizeof(struct dict));
newnode->k=key;
newnode->v=value;
newnode->next=NULL;
if(first==NULL&&last==NULL)
{
first=newnode;
last=newnode;
}
else
{
last->next=newnode;
last=newnode;
}
}
void delete(int key)
{
int i=0;
temp=first;
while(temp!=NULL)
{
if(temp->k==key)
break;
prev=temp;
temp=temp->next;
Page 7 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

i++;
}
if(temp==NULL)
{
printf("Key not Found...\n");
}
else
{
if(temp==first)
{
first=first->next;
printf("Key found at position : %d and successfully
deleted from Dictionary \n",i);
}
else
{
prev->next=temp->next;
printf("Key found at position : %d\n",i);
free(temp);
}
}
}
void search(int key)
{
int count=0;
temp=first;
while(temp!=NULL)
{
if(temp->k==key)
{
count++;
}
temp=temp->next;
}
if(count==1)
{
printf("Key Element found the Dictionary...\n");
}
else
{
printf("Key Not found...\n");
}
}
Page 8 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

void display()
{
int i=0;
temp=first;
printf("DICTIONARY\n");
printf("Position \t Key \t Value \n");
printf("--------------------------------\n");
while(temp!=NULL)
{
printf("%4d %14d %8d \n",i,temp->k,temp->v);
temp=temp->next;
i++;
}
}
main()
{
int c,key,value;
while(1)
{
printf("1.Insert\n2.Delete\n3.Search\n4.Display\n5.Exit\n);
printf("Enter your choice : ");
scanf("%d",&c);
switch(c)
{
case 1 : printf("Enter key :");
scanf("%d",&key);
printf("Enter value :");
scanf("%d",&value);
insert(key,value);
break;
case 2 : printf("Enter key :");
scanf("%d",&key);
delete(key);
break;
case 3 : printf("Enter key :");
scanf("%d",&key);
search(key);
break;
case 4 : display();
break;
case 5 : return 0;
}
Page 9 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

}
}
OUTPUT :
1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 1
Enter key : 45
Enter value : 500

1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 1
Enter key : 98
Enter value : 800
1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 4
DICTIONARY
Position
Key
value
----------------------------------0
45
500
1
98
800
1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 3
Enter key : 45
Key element found in the Dictionary.
Page 10 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

1. Insert
2. Delete
3. Search
4. Display
5. Exit
Enter your choice : 2
Enter key : 45
Key found at position 1 and successfully deleted from Dictionary
6. Insert
7. Delete
8. Search
9. Display
10. Exit
Enter your choice : 5

Page 11 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : Program to perform various operations on AVL Tree.


PROGRAM :
#include <stdio.h>
#include <stdlib.h>
#define max(a,b) ((a>b)?a:b)
typedef struct AvlNode
{
int data;
struct AvlNode *left,*right;
}avlnode;
avlnode *root;
avlnode* rotate_LL(avlnode *parent)
{
avlnode *child=parent->left;
parent->left=child->right;
child->right=parent;
return child;
}
avlnode* rotate_RR(avlnode *parent)
{
avlnode *child=parent->right;
parent->right=child->left;
child->left=parent;
return child;
}
avlnode* rotate_RL(avlnode *parent)
{
avlnode *child = parent->right;
parent->right=rotate_LL(child);
return rotate_RR(parent);
}
avlnode* rotate_LR(avlnode *parent)
{
avlnode *child=parent->left;
parent->left=rotate_RR(child);
Page 12 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

return rotate_LL(parent);
}
int get_height(avlnode *node)
{
int height=0;
if(node!=NULL)
height=1+max(get_height(node->left),get_height(node->right));
return height;
}
int get_balance(avlnode *node)
{
if(node==NULL) return 0;
return get_height(node->left)-get_height(node->right);
}
avlnode* balance_tree(avlnode **node)
{
int bal_factor= get_balance(*node);
if(bal_factor>1)
{
if(get_balance((*node)->left) > 0)
*node=rotate_LL(*node);
else
*node=rotate_LR(*node);
}
else if(bal_factor<-1)
{
if(get_balance((*node)->right) < 0)
*node = rotate_RR(*node);
else
*node = rotate_RL(*node);
}
return *node;
}
avlnode* insert(avlnode **root,int key)
{
if(*root==NULL)
{
*root=(avlnode*)malloc(sizeof(avlnode));
(*root)->data = key;
(*root)->left=(*root)->right=NULL;
}
Page 13 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

else if(key<(*root)->data)
{
(*root)->left=insert(&((*root)->left),key);
(*root)=balance_tree(root);
}
else if(key>(*root)->data)
{
(*root)->right=insert(&((*root)->right),key);
(*root)=balance_tree(root);
}
return *root;
}
avlnode* search(avlnode *node, int key)
{
if(node==NULL) return NULL;
printf("%d->",node->data);
if(key==node->data)
return node;
else if(key<node->data)
search(node->left,key);
else
search(node->right,key);
}
void display(avlnode *root)
{
if(root==NULL)
return;
printf(" %d",root->data);
display(root->left);
display(root->right);
}
main()
{
int ch,x;
while(1)
{
printf("\n1.INSERT\n2.SEARCH\n3.DISPLAY\n4.EXIT");
printf("\nEnter your choice:");
scanf("%d",&ch);
switch(ch)
{
Page 14 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

case 1 :

case 2 :

case 3:
case 4:
}

printf("\nEnter a key to insert");


scanf("%d",&x);
insert(&root,x);
break;
printf("\nEnter search key");
scanf("%d",&x);
search(root,x);
break;
display(root);
break;
exit(0);

}
}
OUTPUT :
1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 1
Enter a key to insert : 3
1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 1
Enter a key to insert : 2
1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 1
Enter a key to insert : 4
1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 3
3
2
4
Page 15 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 1
Enter a key to insert : 5
1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 1
Enter a key to insert : 6
1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 3
3
2
5
4

1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 2
Enter the key to search : 4
354
1. INSERT
2. SEARCH
3. DISPLAY
4. EXIT
Enter Your choice : 4

Page 16 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : To perform various on 2-3 trees.


PROGRAM :

#include<iostream.h>
#include<fstream.h>
using namespace std;
// TwoThreeNode class
class TwoThreeNode {
private:
// Gets the value of the smallest data item in the subtree
// rooted by this node
int getSmallest() {
TwoThreeNode *node = this;
while (!node->isLeaf()) node = node->child[0];
return node->key[0];
}
// Insert into a node with 1 child
void insert1Siblings(TwoThreeNode *newChild, int newSmallest) {
int newKey = newChild->key[0];
newChild->parent = this;
if (newKey < child[0]->key[0]) {
// newNode is inserted as first child of root
child[1] = child[0];
child[0] = newChild;
key[0] = child[1]->getSmallest();
}
else {
// newNode is iserted as second child of root
child[1] = newChild;
key[0] = newSmallest;
}
}
// Insert into a node with 2 children
void insert2Siblings(TwoThreeNode *newChild, int newSmallest) {
int newKey = newChild->key[0];
newChild->parent = this;
if (newKey < child[0]->key[0]) {
Page 17 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

child[2] = child[1];
child[1] = child[0];
child[0] = newChild;
key[1] = key[0];
key[0] = child[1]->getSmallest();
updateParentSmallest(newSmallest);
}
else if (newKey < child[1]->key[0]) {
child[2] = child[1];
child[1] = newChild;
key[1] = key[0];
key[0] = newSmallest;
}
else {
child[2] = newChild;
key[1] = newSmallest;
}
}
// Insert into a node with 3 children
void insert3Siblings(TwoThreeNode *newChild, int newSmallest) {
int newKey = newChild->key[0];
int splitSmallest = -1;
TwoThreeNode *splitNode = new TwoThreeNode();
splitNode->parent = parent;
if (newKey < child[0]->key[0] || newKey < child[1]->key[0]) {
// newChild is inserted in current node
splitSmallest = key[0];
splitNode->child[0] = child[1];
splitNode->child[1] = child[2];
splitNode->key[0] = key[1];
child[1]->parent = splitNode;
child[2]->parent = splitNode;
newChild->parent = this;
if (newKey < child[0]->key[0]) {
// newChild is inserted as first child
child[1] = child[0];
Page 18 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

child[0] = newChild;
key[0] = child[1]->getSmallest();
updateParentSmallest(newSmallest);
}
else {
// newChild is inserted as second child
child[1] = newChild;
key[0] = newSmallest;
}
}
else {
// newChild is inserted in split node
child[2]->parent = splitNode;
newChild->parent = splitNode;
if (newKey < child[2]->key[0]) {
// newChild is inserted as first child
splitSmallest = newSmallest;
splitNode->child[0] = newChild;
splitNode->child[1] = child[2];
splitNode->key[0] = key[1];
}
else {
// newChild is inserted as second child
splitSmallest = key[1];
splitNode->child[0] = child[2];
splitNode->child[1] = newChild;
splitNode->key[0] = newSmallest;
}
}
child[2] = NULL;
key[1] = -1;
if (parent->parent == NULL) {
// At root, so new root needs to be created
TwoThreeNode *newNode = new TwoThreeNode();
parent->child[0] = newNode;
newNode->parent = parent;
newNode->child[0] = this;
parent = newNode;
Page 19 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

}
parent->insert(splitNode, splitSmallest);
}
// Update the parent nods efor the smallest child value
void updateParentSmallest(int data) {
switch (sibNumber()) {
case 0: if (parent->parent != NULL) parent>updateParentSmallest(data); break;
case 1: parent->key[0] = data; break;
case 2: parent->key[1] = data; break;
}
}
public:
int key[2];
TwoThreeNode *parent, *child[3];
// Constructor
TwoThreeNode(int data = -1) {
key[0] = data;
key[1] = -1;
parent = child[0] = child[1] = child[2] = NULL;
}
// Check if node is a leaf
bool isLeaf() {
return (child[0] == NULL);
}
// Get which sibling the node is
int sibNumber() {
for (int i = 0; i < 3; ++i) {
if (this == parent->child[i]) return i;
}
return -1;
}
// Insertion
void insert(TwoThreeNode *newChild, int newSmallest) {
if (child[1] == NULL) insert1Siblings(newChild, newSmallest);
else if (child[2] == NULL) insert2Siblings(newChild, newSmallest);
else insert3Siblings(newChild, newSmallest);
Page 20 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

}
};
// TwoThreeTree class
class TwoThreeTree {
private:
TwoThreeNode *root;
// Find the appropriate operation point
TwoThreeNode* findSpot(TwoThreeNode *node, int data) {
if (node == NULL) return NULL;
while (!node->isLeaf()) {
if (node->key[0] == data || node->key[1] == data)
return NULL;
if (node->key[0] == -1 || data < node->key[0])
node = node->child[0];
else if (node->key[1] == -1 || data < node->key[1])
node = node->child[1];
else
node = node->child[2];
}
if (node->key[0] == data) return NULL;
return node->parent;
}
// Recursively print the subtree starting from the given node
void print(TwoThreeNode *node, int tabs = 0) {
for (int i = 0; i < tabs; ++i) {
cout << "\t";
}
if (node == NULL) {
cout << "`--> NULL" << endl;
return;
}
cout << "`--> " << node->sibNumber()
<< ": ( " << node->key[0] << ", " << node->key[1] << ")" << endl;
if (!node->isLeaf()) {
++tabs;
print(node->child[0], tabs);
Page 21 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

print(node->child[1], tabs);
print(node->child[2], tabs);
}
}
public:
// Constructor
TwoThreeTree() {
root = new TwoThreeNode();
root->child[0] = new TwoThreeNode();
root->child[0]->parent = root;
}
// Insert
bool insert(int data) {
TwoThreeNode *newNode = new TwoThreeNode(data);
TwoThreeNode *spot = root->child[0];
if (spot->child[0] == NULL) {
// First insertion
newNode->parent = spot;
spot->child[0] = newNode;
}
else {
spot = findSpot(spot, data);
if (spot == NULL) return false;
spot->insert(new TwoThreeNode(data), data);
}
return true;
}
// Print
void print() {
print(root->child[0]);
cout << endl;
}
};
// Main function
int main(int argc, char **argv) {
if (argc <= 1) {
cout << argv[0] << ": too few arguments" << endl;
Page 22 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

cout << "Usage: " << argv[0] << " filename" << endl;
exit(1);
}
// Open file
ifstream infile;
infile.open(argv[1]);
// Create tree and insert data
TwoThreeTree ttTree;
int x;
while (infile.good()) {
infile >> x;
if (!infile.eof()) {
cout << x << endl;
ttTree.insert(x);
ttTree.print();
}
}
infile.close();
return 0;
}

Page 23 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : Program to perform various operations on Binary Heap.


PROGRAM :
#include <stdio.h>
#include<stdlib.h>
int size=0,heap[10];
void insert();
void deletemin();
void display();
void percolatedown(int);
main()
{
int op;
while(1)
{
printf("1.Insert\n2.DeleteMin\n3.Display\n4.Exit\n);
printf("Enter Your Choice : ");
scanf("%d",&op);
switch(op)
{
case 1 : insert();
break;
case 2 : deletemin();
break;
case 3 : display();
break;
case 4 : exit(0);
default : printf("Choose a valid Option....\n");
}
}
}
void insert()
{
int hole,x;
if(size>10)
printf("Heap is full...\n");
else
{
hole=++size;
Page 24 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

printf("Enter element to be inserted : ");


scanf("%d",&x);
for(;hole>1&&heap[hole/2]>x;hole/=2)
{
heap[hole]=heap[hole/2];
}
heap[hole]=x;
}
}
void deletemin()
{
int x=heap[1];
if(size==0)
printf("Heap is empty...\n");
else
{
heap[1]=heap[size--];
percolatedown(1);
printf("Min Element %d is Deleted successfully...\n",x);
}
}
void percolatedown(int hole)
{
int left,right,temp,min,target;
min=heap[hole];
while(2*hole<=size)
{
left=2*hole;
right=left+1;
if(right<=size&&heap[right]<heap[left])
target=right;
else
target=left;
if(heap[target]<min)
{
temp=heap[hole];
heap[hole]=heap[target];
heap[target]=temp;
hole=target;
}
else
break;
Page 25 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

}
heap[hole]=min;
}
void display()
{
int i;
if(size==0)
printf("Heap is Empty...\n");
else
{
printf("BINARY HEAP\n");
for(i=0;i<=size;i++)
{
printf("%5d",heap[i]);
}
printf("\n");
}
}
OUTPUT :
1. Insert
2. Delete Min
3. Display
4. Exit
Enter Your Choice : 1
Enter element to be inserted : 44
1. Insert
2. Delete Min
3. Display
4. Exit
Enter Your Choice : 1
Enter element to be inserted : 54
1. Insert
2. Delete Min
3. Display
4. Exit
Enter Your Choice : 1
Enter element to be inserted : 64

Page 26 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

1. Insert
2. Delete Min
3. Display
4. Exit
Enter Your Choice : 3
BINARY HEAP
0
44
54
64
1. Insert
2. Delete Min
3. Display
4. Exit
Enter Your Choice : 2
Min Element 44 is Deleted successfully...
1. Insert
2. Delete Min
3. Display
4. Exit
Enter Your Choice : 3
BINARY HEAP
0
54
64
1. Insert
2. Delete Min
3. Display
4. Exit
Enter Your Choice : 4

Page 27 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : Program to perform following operations on the Graph.


1.InsertVertex
2.Insert Edge
3.Delete Edge
4.Find Vertex
PROGRAM :
#include<stdio.h>
struct vertex
{
struct vertex *next;
char data;
struct edge *adj;
}*first=NULL,*p;
struct edge
{
char dest;
struct edge *link;
};
struct vertex *find_vertex(char);
main()
{
int choice;
char x,origin, destin;
while(1)
{
printf( "1.InsertVertex\n" );
printf( "2.InsertEdge\n" );
printf( "3.DeleteVertex\n" );
printf( "4.FindVertex\n");
printf( "5.Display\n" );
printf( "6.Exit\n" );
printf( "Enter your choice : " );
scanf( "%d",&choice );
switch(choice)
{
case 1: printf("Enter a vertex to be inserted : " );
scanf(" %c",&x);
insert_vertex(x);
break;
case 2: printf( "Enter an edge to be inserted : " );
scanf( " %c %c", &origin, &destin );
insert_edge( origin, destin );
break;
Page 28 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

case 3:

case 4:

case 5:
case 6:

printf( "Enter a vertex to be deleted : " );


scanf( " %c",&x);
delete_vertex(x);
delvertex_edge(x);
break;
printf( "Enter a vertex to find:" );
scanf( " %c",&x);
p=find_vertex(x);
if(p==NULL)
printf("\n vertex not found\n");
else
printf("\n vertex %c found\n",p->data);
break;
display();
break;
exit();

}
}
}
insert_vertex( char x)
{
struct vertex *temp,*newnode;
newnode=(struct vertex *) malloc( sizeof( struct vertex));
newnode->data=x;
newnode->next = NULL;
newnode->adj=NULL;
if(first==NULL)
{
first=newnode;
return;
}
temp=first;
while(temp->next!=NULL )
temp=temp->next;
temp->next =newnode;
}
delete_vertex( char x)
{
struct vertex *temp,*ptr;
if (first->data==x)
{
temp=first;
Page 29 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

first=first->next;
free(temp);
return;
}
temp=first;
while(temp->next->next!=NULL)
{
if(temp->next->data==x)
{
ptr=temp->next;
temp->next=ptr->next;
free(ptr);
return;
}
temp=temp->next;
}
if ( temp->next->data==x)
{
ptr= temp->next;
free(ptr);
temp->next=NULL;
}
}
delvertex_edge(char x)
{
struct vertex *temp;
struct edge *ptr,*temp1;
temp=first;
while (temp!=NULL )
{
if ( temp->adj->dest==x)
{
temp1=temp->adj;
temp->adj=temp->adj->link;
free(temp1);
}
temp1=temp->adj;
while(temp1->link->link!=NULL )
{
if (temp1->link->dest==x
{
ptr=temp1->link;
Page 30 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

temp1->link=ptr->link;
free(ptr);
}
temp1=temp1->link;
}
if (temp1->link->dest==x)
{
ptr=temp1->link;
free(ptr);
temp1->link=NULL;
}
temp=temp->next;
}
}
insert_edge(char s, char d)
{
struct vertex *locs, *locd;
struct edge *newnode,*temp;
locs=find_vertex(s);
newnode=(struct edge *)malloc(sizeof( struct edge));
newnode->dest=d;
newnode->link=NULL;
if(locs->adj==NULL)
{
locs->adj=newnode;
return;
}
temp=locs->adj;
while(temp->link!=NULL)
temp=temp->link;
temp->link=newnode;
}
struct vertex *find_vertex( char x)
{
struct vertex *temp,*loc=NULL;
temp=first;
while (temp!=NULL )
{
if(temp->data==x)
{
loc=temp;
return loc;
Page 31 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

}
else
temp=temp->next;
}
return loc;
}
display()
{
struct node *temp;
struct edge *temp1;
temp=first;
while(temp!=NULL )
{
printf( "%c ->",temp->data);
temp1=temp->adj;
while (temp1!=NULL)
{
printf( "%c->",temp1->dest);
temp1=temp1->link;
}
printf( "\n" );
temp=temp->next;
}
}
OUTPUT :
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 1
Enter a vertex to be inserted : A
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 1
Enter a vertex to be inserted : B
Page 32 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 1
Enter a vertex to be inserted : C
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 1
Enter a vertex to be inserted : D
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 2
Enter an edge to be inserted : A B
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 2
Enter an edge to be inserted: A C
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 2
Enter an edge to be inserted : B D
Page 33 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 2
Enter an edge to be inserted : C D
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 5
ABC
BD
CD
D
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 3
Enter a vertex to be deleted : A
BD
CD
D
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 4
Enter a vertex to Find : D
Vertex Found.

Page 34 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : Program to perform the following operations on Graph.


1. Insert Vertex
2.Insert Edge
3.Delete Edge
4.Find Vertex
PROGRAM
#include<stdio.h>
struct vertex
{
struct vertex *next;
char data;
struct edge *adj;
}*first=NULL,*p;
struct edge
{
char dest;
struct edge *link;
};
struct vertex *find_vertex(char);
main()
{
int choice;
char x,origin, destin;
while(1)
{
printf( "1.InsertVertex\n" );
printf( "2.InsertEdge\n" );
printf( "3.DeleteEdge\n" );
printf( "4.FindVertex\n");
printf( "5.Display\n" );
printf( "6.Exit\n" );
printf( "Enter your choice : " );
scanf( "%d",&choice );
switch(choice)
{
case 1: printf("Enter a vertex to be inserted : " );
scanf(" %c",&x);
insert_vertex(x);
break;
case 2: printf( "Enter an edge to be inserted : " );
scanf( " %c %c", &origin, &destin );
insert_edge( origin, destin );
Page 35 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

case 3:

case 4:

case 5:
case 6:
}

break;
printf( "Enter an edge to be deleted : " );
scanf( " %c %c", &origin, &destin );
delete_edge( origin, destin );
break;
printf( "Enter a vertex to find:" );
scanf( " %c",&x);
p=find_vertex(x);
if(p==NULL)
printf("\n vertex not found\n");
else
printf("\n vertex %c found\n",p->data);
break;
display();
break;
exit();

}
}
insert_vertex( char x)
{
struct vertex *temp,*newnode;
newnode=(struct vertex *) malloc( sizeof( struct vertex));
newnode->data=x;
newnode->next = NULL;
newnode->adj=NULL;
if(first==NULL)
{
first=newnode;
return;
}
temp=first;
while(temp->next!=NULL )
temp=temp->next;
temp->next =newnode;
}
insert_edge(char s, char d)
{
struct vertex *locs, *locd;
struct edge *newnode,*temp;
locs=find_vertex(s);
newnode=(struct edge *)malloc(sizeof( struct edge));
Page 36 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

newnode->dest=d;
newnode->link=NULL;
if(locs->adj==NULL)
{
locs->adj=newnode;
return;
}
temp=locs->adj;
while(temp->link!=NULL)
temp=temp->link;
temp->link=newnode;
}
struct vertex *find_vertex( char x)
{
struct vertex *temp,*loc=NULL;
temp=first;
while (temp!=NULL )
{
if(temp->data==x)
{
loc=temp;
return loc;
}
else
temp=temp->next;
}
return loc;
}
delete_edge(char s, char d)
{
struct vertex *locs,*locd;
struct edge *ptr,*temp;
locs=find_vertex(s);
if (locs->adj->dest==d)
{
temp=locs->adj;
locs->adj=locs->adj->link;
free(temp);
return ;
}
temp=locs->adj;
while (temp->link->link!=NULL )
Page 37 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

{
if (temp->link->dest==d)
{
ptr=temp->link;
temp->link =ptr->link;
free(temp);
return;
}
temp=temp->link;
}
if ( temp->link->dest==d)
{
ptr=temp->link;
free(ptr);
temp->link=NULL;
return;
}
}
display()
{
struct node *temp;
struct edge *temp1;
temp=first;
while(temp!=NULL )
{
printf( "%c ->",temp->data);
temp1=temp->adj;
while (temp1!=NULL)
{
printf( "%c->",temp1->dest);
temp1=temp1->link;
}
printf( "\n" );
temp=temp->next;
}
}

Page 38 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

OUTPUT :
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 1
Enter a vertex to be inserted : A
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 1
Enter a vertex to be inserted : B
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 1
Enter a vertex to be inserted : C
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice : 1
Enter a vertex to be inserted : D
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
Page 39 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

6. Exit
Enter your choice : 2
Enter an edge to be inserted : A B
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 2
Enter an edge to be inserted: A C
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 2
Enter an edge to be inserted : B D
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 2
Enter an edge to be inserted : C D
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 5
ABC
BD
CD
D

Page 40 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 3
Enter an edge to be deleted : A C
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 5
AB
BD
CD
D
1. Insert Vertex
2. Insert Edge
3. Delete Edge
4. Find Vertex
5. Display
6. Exit
Enter your choice: 6

Page 41 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : Program to implement Depth First Search for a graph non-recursively.


PROGRAM :
#include<stdio.h>
int top=-1,a[20][20],visit[20],stack[20];
void push(int ele)
{
if(top==19)
printf("Over Flow...");
else
stack[++top]=ele;
}
int pop()
{
int key;
if(top==-1)
return (0);
else
{
key=stack[top--];
return (key);
}
}
main()
{
int i,j,n,s,k;
printf("Enter no of Vertices : ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("Enter edge (%d,%d) : ",i,j);
scanf("%d",&a[i][j]);
}
}
printf("The Adjacency Matrix is : \n" );
Page 42 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
for(i=1;i<=n;i++)
visit[i]=0;
printf("Enter Source Vertex : ");
scanf("%d",&s);
printf("The DFS of Graph is :\n");
push(s);
visit[s]=1;
k=pop();
if(k!=0)
printf("%d ->",k);
while(k!=0)
{
for(i=1;i<=n;i++)
if((a[k][i]!=0)&&(visit[i]==0))
{
push(i);
visit[i]=1;
}
k=pop();
if(k!=0)
printf("%d ->",k);
}
}

OUTPUT :
Enter no of Vertives : 2
Enter edge (1,1) : 0
Enter edge (1,2) : 1
Enter edge (2,1) : 1
Enter edge (2,2) : 0
The Adjacency Matrix is :
0 1
1 0
Enter the Source Vertex : 1
Page 43 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

The DFS Graph is :


1->2->
AIM : Program to implement Breadth First Search for a graph nonrecursively.
PROGRAM :
#include<stdio.h>
int front=-1,rear=-1,a[20][20],visit[20],queue[20];
void insert(int item);
int delete();
main()
{
int n,i,j,s,k;
printf("Enter the number of the vertices : ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("Enter the (%d,%d):",i,j);
scanf("%d",&a[i][j]);
}
}
printf("The adjacency martix is:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
for(i=1;i<=n;i++)
visit[i]=0;
printf("Enter the source vertex : ");
scanf("%d",&s);
printf("The BFS graph is : \n");
insert(s);
visit[s]=1;
k=delete();
if(k!=0)
Page 44 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

printf("%d",k);
while(k!=0)
{
for(i=1;i<=n;i++)
if((a[k][i]!=0)&&(visit[i]==0))
{
insert(i);
visit[i]=1;
}
k=delete();
if(k!=0)
printf("->%d",k);
}
printf("\n");
}
void insert(int item)
{
if(front==19)
printf("Queue is full...\n");
else
queue[++rear]=item;
}
int delete()
{
int k;
if(front==rear)
return (0);
else
{
k=queue[++front];
return(k);
}
}
OUTPUT :
Enter the number of the vertices : 3
Enter the (1,1):0
Enter the (1,2):1
Enter the (1,3):1
Enter the (2,1):0
Enter the (2,2):0
Page 45 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

Enter the (2,3):0


Enter the (3,1):0
Enter the (3,2):0
Enter the (3,3):0
The adjacency martix is:
011
000
000
Enter the source vertex : 1
The BFS graph is :
1->2->3

Page 46 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : Program to find cost of Minimal Spanning tree using Prims algorithm
PROGRAM:
#include<stdio.h>
main()
{
int u,v,n,i,j,ne=1;
int visited[10]={0},min,mincost=0,cost[10][10];
printf("\n Enter the number of nodes:");
scanf("%d",&n);
printf("\n Enter the adjacency matrix:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf("\n enter edge(%d,%d)cost:",i,j);
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=999;
}
visited[1]=1;
printf("\n Minimum Spanning Tree");
while(ne<n)
{
for(i=1,min=999;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(cost[i][j]<min &&visited[i]!=0)
{
min=cost[i][j];
u=i;
v=j;
}
}
}
if(visited[u]==0||visited[v]==0)
{
printf("\n Edge %d:(%d,%d) cost:%d",ne++,u,v,min);
mincost+=min;
visited[v]=1;
Page 47 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

}
cost[u][v]=cost[v][u]=999;
}
printf("\nCost of Minimum Spanning Tree=%d",mincost);
}

OUT PUT:
Enter no of vertices : 4
Enter the cost of edge (1,1) : 0
Enter the cost of edge (1,2) : 2
Enter the cost of edge (1,3) : 4
Enter the cost of edge (1,4) : 0
Enter the cost of edge (2,1) : 2
Enter the cost of edge (2,2) : 0
Enter the cost of edge (2,3) : 0
Enter the cost of edge (2,4) : 5
Enter the cost of edge (3,1) : 4
Enter the cost of edge (3,2) : 0
Enter the cost of edge (3,3) : 0
Enter the cost of edge (3,4) : 10
Enter the cost of edge (4,1) : 0
Enter the cost of edge (4,2) : 5
Enter the cost of edge (4,3) : 10
Enter the cost of edge (4,4) : 0
The minimal Spanning tree is
The edge 1 (1,2) cost : 2
The edge 2 (1,3) cost : 4
The edge 3 (2,4) cost : 5
Cost of Minimal Spanning tree is : 11

Page 48 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : Program to find cost of Minimal Spanning tree using Kruskals


algorithm
#include<stdio.h>
int u,v,a,b,n,i,j,ne=1;
int min,mincost=0,cost[10][10],parent[10];
int find(int);
int uni(int,int);
void main()
{
printf("\n Enter The no.of Nodes:");
scanf("%d",&n);
printf("\n Enter The weight Matrix:");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf("\n Enter Edge(%d,%d)cost:",i,j);
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=999;
}
printf("\n");
while(ne<n)
{
for(i=1,min=999;i<=n;i++)
{
for(j=1;j<n;j++)
{
if(cost[i][j]<min)
{
min=cost[i][j];
u=i;
v=j;
}
}
}
a=find(u);
b=find(v);
if(uni(a,b))
{
printf("\n edge %d:(%d%d)cost:%d",ne++,u,v,min);
mincost+=min;
}
Page 49 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

cost[u][v]=cost[v][u]=999;
}
printf("\n minimum cost=%d",mincost);
}
int find(int i)
{
while(parent[i])
i=parent[i];
return i;
}
int uni(int i,int j)
{
if(i!=j)
{
parent[j]=i;
return i;
}
return 0;
}

output
Enter The no.of Nodes:5
Enter The weight Matrix:
Enter Edge(1,1)cost:0
Enter Edge(1,2)cost:3
Enter Edge(1,3)cost:6
Enter Edge(1,4)cost:1
Enter Edge(1,5)cost:0
Enter Edge(2,1)cost:3
Enter Edge(2,2)cost:0
Enter Edge(2,3)cost:7
Enter Edge(2,4)cost:0
Page 50 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

Enter Edge(2,5)cost:4
Enter Edge(3,1)cost:6
Enter Edge(3,2)cost:7
Enter Edge(3,3)cost:0
Enter Edge(3,4)cost:2
Enter Edge(3,5)cost:1
Enter Edge(4,1)cost:1
Enter Edge(4,2)cost:0
Enter Edge(4,3)cost:2
Enter Edge(4,4)cost:0
Enter Edge(4,5)cost:2
Enter Edge(5,1)cost:0
Enter Edge(5,2)cost:4
Enter Edge(5,3)cost:1
Enter Edge(5,4)cost:2
Enter Edge(5,5)cost:0

edge 1:(14)cost:1
edge 2:(53)cost:1
edge 3:(34)cost:2
edge 4:(12)cost:3
minimum cost=7

Page 51 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM : To implement Dijkstras algorithm to find shortest path in the graph


#include "stdio.h"
#include "conio.h"
#define infinity 999
void dij(int n,int v,int cost[10][10],int dist[])
{
int i,u,count,w,flag[10],min;
for(i=1;i<=n;i++)
flag[i]=0,dist[i]=cost[v][i];
count=2;
while(count<=n)
{
min=99;
for(w=1;w<=n;w++)
if(dist[w]<min && !flag[w])
min=dist[w],u=w;
flag[u]=1;
count++;
for(w=1;w<=n;w++)
if((dist[u]+cost[u][w]<dist[w]) && !flag[w])
dist[w]=dist[u]+cost[u][w];
}
}
void main()
{
int n,v,i,j,cost[10][10],dist[10];
clrscr();
printf("\n Enter the number of nodes:");
scanf("%d",&n);
printf("\n Enter the cost matrix:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=infinity;
}
printf("\n Enter the source matrix:");
scanf("%d",&v);
Page 52 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

dij(n,v,cost,dist);
printf("\n Shortest path:\n");
for(i=1;i<=n;i++)
if(i!=v)
printf("%d->%d,cost=%d\n",v,i,dist[i]);
getch();
}
OUTPUT:
Enter the number of nodes:3
Enter the cost matrix:
126
201
798
Enter the source matrix:1
Shortest path:
1->2,cost=2
1->3,cost=3

Page 53 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM:To implement pattern matching using Boyer-Moore algorithm


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *BoyerMoore( unsigned char *data, unsigned int dataLength, unsigned


char *string, unsigned int strLength )
{
unsigned int skipTable[256], i;
unsigned char *search;
register unsigned char lastChar;

if (strLength == 0)
return NULL;

for (i = 0; i < 256; i++)


skipTable[i] = strLength;

search = string;

i = --strLength;

do

Page 54 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

{
skipTable[*search++] = i;
} while (i--);

lastChar = *--search;

search = data + strLength;


dataLength -= strLength+(strLength-1);

while ((int)dataLength > 0 )


{
unsigned int skip;

skip = skipTable[*search];
search += skip;
dataLength -= skip;
skip = skipTable[*search];
search += skip;
dataLength -= skip;
skip = skipTable[*search];

if (*search != lastChar) /*if (skip > 0)*/


{

search += skip;
dataLength -= skip;
continue;
Page 55 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

i = strLength;

do
{

if (i-- == 0)
return search;
} while (*--search == string[i]);

search += (strLength - i + 1);


dataLength--;
}

return NULL;
}

int main(void)
{

static char data[] = "aaaabouaaa384982n chwercoiewar45u0943


twert3aaaaaaMarabou t9034u5t09t8493t43vkdsropgb";
static char search[] = "Marabou";

Page 56 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

char *str = BoyerMoore( data, strlen(data), search, strlen(search) );


clrscr();
if (str == NULL)
puts( "String not found" );
else
puts( str );

return 0;
}
OUTPUT:
Marabou t9034u5t09t8493t43vkdsropgb

Page 57 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM: To implement Knuth-Morris-Pratt algorithm for pattern matching


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*
* finds the position of the pattern in the given target string
* target - str, patter - word
*/

int kmpSearch(char *str, char *word, int *ptr) {


int i = 0, j = 0;

while ((i + j) < strlen(str)) {


/* match found on the target and pattern string char */
if (word[j] == str[i + j]) {
if (j == (strlen(word) - 1)) {
printf("%s located at the index %d\n",
word, i + 1);
return;
}
j = j + 1;
} else {
/* manipulating next indices to compare */
i = i + j - ptr[j];
if (ptr[j] > -1) {
Page 58 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

j = ptr[j];
} else {
j = 0;
}
}
}
}

/* find the overlap array for the given pattern */


void findOverlap(char *word, int *ptr) {
int i = 2, j = 0, len = strlen(word);

ptr[0] = -1;
ptr[1] = 0;

while (i < len) {


if (word[i - 1] == word[j]) {
j = j + 1;
ptr[i] = j;
i = i + 1;
} else if (j > 0) {
j = ptr[j];
} else {
ptr[i] = 0;
i = i + 1;
}
}
Page 59 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

return;
}

int main() {

char word[256], str[1024];


int *ptr, i;
clrscr();
/* get the target string from the user */
printf("Enter your target string:");
fgets(str, 1024, stdin);
str[strlen(str) - 1] = '\0';

/* get the pattern string from the user */


printf("Enter your pattern string:");
fgets(word, 256, stdin);
word[strlen(word) - 1] = '\0';

/* dynamic memory allocation for overlap array */


ptr = (int *)calloc(1, sizeof(int) * (strlen(word)));

/* finds overlap array */


findOverlap(word, ptr);
/* find the index of the pattern in target string */
kmpSearch(str, word, ptr);

return 0;
Page 60 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

}
Output:
Enter your target string:aditya engineering college
Enter your pattern string:aditya
aditya located at the index 1

Page 61 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

Additional Programs:

AIM: To implement All Pairs shortest path using Floyds algorithm


#include<stdio.h>
int a[10][10],n;
char vertex[10];
void Floyd();
int Min();

int main()
{
int i,j;
clrscr();
printf("Enter no.of nodes in the graph\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter the name of vertex %d\n",i+1);
scanf(" %c",&vertex[i]);
}

printf("If the if the vertices are adjacent enter edge lenght else 0\n");
for(i=0;i<n;i++)
Page 62 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

{
for(j=0;j<n;j++)
{
printf("%c-%c=",vertex[i],vertex[j]);
scanf("%d",&a[i][j]);
if(a[i][j]==0)
a[i][j]=9999;
printf("\n");
}
}
Floyd();
return(0);
}

void Floyd()
{
int i,j,k;

/*This is the main block of Floyd's algoritm which calculates the


minimum path
* from every vertex in the graph to every other vertex.*/
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{

Page 63 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

for(j=0;j<n;j++)
{
a[i][j]=Min(a[i][j],(a[i][k]+a[k][j]));
}
}
}

printf("Minimum Path matrix is\n");


printf(" ");
for(i=0;i<n;i++)
printf("\t%c",vertex[i]);
printf("\n");
for(i=0;i<n;i++)
{
printf("%c",vertex[i]);
for(j=0;j<n;j++)
{
if(a[i][j]!=9999)
printf("\t%d",a[i][j]);
else
printf("\t%d",0);
}
printf("\n");
}
return;
}

Page 64 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

int Min(int x,int y)


{
if(x>y)
return(y);
else
return(x);
}

OUTPUT:
Enter no.of nodes in the graph
3
Enter the name of vertex 1
a
Enter the name of vertex 2
b
Enter the name of vertex 3
c
If the if the vertices are adjacent enter edge lenght else 0
a-a=0

a-b=12

a-c=34

b-a=87

Page 65 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

b-b=0

b-c=2

c-a=0

c-b=5

c-c=0

Minimum Path matrix is


a

99

12

14

87

92

Page 66 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

AIM: To implement Warshalls Algorithm for generating path matrix

#include<stdio.h>
int a[10][10],n;
char vertex[10];
void warshall();

int main()
{
int i,j;

printf("Enter no.of nodes in the graph\n");

scanf("%d",&n);

for(i=0;i<n;i++)
{
printf("Enter the name of vertex %d\n",i+1);
scanf(" %c",&vertex[i]);
}
printf("If the vertices are adjacent enter 1 else 0\n");

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
Page 67 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

{
printf("%c-%c=",vertex[i],vertex[j]);
scanf("%d",&a[i][j]);
printf("\n");
}
}
warshall();
return(0);
}

void warshall()
{
int i,j,k;
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=a[i][j]|(a[i][k]&a[k][j]);
}
}
}

printf("Path matrix is\n");


printf(" ");
Page 68 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

for(i=0;i<n;i++)
printf("%3c",vertex[i]);
printf("\n");
for(i=0;i<n;i++)
{
printf("%c",vertex[i]);
for(j=0;j<n;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
return;
}

output
Enter no.of nodes in the graph
3
Enter the name of vertex 1
A
Enter the name of vertex 2
B
Enter the name of vertex 3
C
If the vertices are adjacent enter 1 else 0
A-A=0

Page 69 of 70

ADVANCED DATA STRUCTURES LAB MANUAL

A-B=1

A-C=1

B-A=0

B-B=0

B-C=1

C-A=0

C-B=1

C-C=0

Path matrix is
A B C
A 0 1 1
B 0 1 1
C 0 1 1

Page 70 of 70

You might also like