You are on page 1of 48

# EX NO: IMPLEMENTATION OF RECURSIVE ALGORITHM

## DATE: USING POINTER

AIM:
To write a C-Program to implement a recursive algorithm using pointers

ALGORITHM:

## STEP 1: Start the program

STEP 2: Declare the variable, *no, factorial, sum, p, i, and the function fact(int p),
sum(int p), fib(int p)
STEP 3: Read the value of no.
STEP 4: Call the function fact(*no), sum(*no)
STEP 5: Using a for loop call the function fib(int p) and display the Fibonacci series &
also display factorial & summation.
STEP 6: Stop the program

## STEP 1: Check whether the value of n is equal to ‘0’ if so return ‘0’

STEP 2: Else check whether (p>=1 && p<=2), if so return the value ‘1’
STEP 3: Else return ( fib(p-1)+ fib(p-2))

## STEP 1: Check whether (p==0), if so return ‘1’.

STEP 2: Else return (p*fact(p-1))

## STEP 1: Check whether p==0, if so return ‘0’

STEP 2: Else return (p+sum(p-1))
PROGRAM:

#include<stdio.h>
#include<conio.h>
void main()
{
int i,p, *no,factorial,summ;
int fact(int p);
int sum(int p);
int fib(int p);
clrscr();
printf("\n Enter The Number:");
scanf("%d",no);
printf("\n The Fibonnacci series: \n");
for(i=0;i<*no;i++)
printf("%d\n",fib(i));
factorial=fact(*no);
printf("\n The factorial of %d: %d\n", *no,factorial);
summ=sum(*no);printf("\nThe summation of %d: %d\n", *no,summ);
getch();
}
int fib(int p)
{
if(p==0)
return(0);
if(p>=1&&p<=2)
return(1);
else
return(fib(p-1)+fib(p-2));
}
int fact(int p)
{
if(p==0)
return(1);
else
return(p*fact(p-1));
}
int sum(int p)
{
if(p==0)
return(0);
else
return(p+sum(p-1));
}
OUTPUT:

## The Fibonacci series:

0
1
1
2
3
The factorial of 5: 120
The summation of 5: 15
RESULT:

Thus the C-Program was written to implement a recursive algorithm using pointers and the
output was verified
`EX.NO: IMPLEMENTATION OF BUBBLE SORT
DATE:

AIM: To write a C-Program to implement bubble sort using pointers and functions

ALGORITHM:

## STEP 1: Start the program

STEP 2: Read the value of n
STEP 3: Set a for loop to read the elements of array
for(i=0;i<n;i++)
STEP 4: Call the function bubblesort(a,n)
STEP 5: Print the sorted array a
STEP 6: Stop the program

## STEP 1: Declare the local variable.

STEP 2: Set a for loop
for(i=0;i<n;i++)
STEP 3: Nest another for loop
for(j=1;j<n;j++)
STEP 4: Check the condition
b[i]>b[j]
STEP 5: If so swap the two values using temporary variable t as
t=a[i]
b[i]=b[j]
b[j]=t
STEP 6: Else go back to step3.
PROGRAM:

#include<stdio.h>
#include<conio.h>
void bubblesort(int*[],int);
void main()
{
int i,n,a[100];
clrscr();
printf("\n Enter the number of elements:");
scanf("%d",&n);
printf("\n Enter the array elements");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("\nUNSORTED ARRAY ELEMENTS");
for(i=0;i<n;i++)
printf("\t%d",a[i]);
bubblesort(a,n);
printf("\nSORTED ARRAY");
for(i=0;i<n;i++)
printf("\t%d",*(a+i));
getch();
}
void bubblesort(int* b[],int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(b[i]>b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
}
OUTPUT:

32
12
456
43
56

## SORTED ARRAY 12 32 34 43 56 456

RESULT:

Thus the C-Program was written to implement bubble sort using pointers and functions
and the output was verified successfully.
EX.NO: IMPLEMENTATION OF SELECTION SORT
DATE:

AIM: To write a C-Program to implement selection sort using pointers and functions

ALGORITHM:

## STEP 1: Start the program

STEP 2: Read the value of n
STEP 3: Set a for loop to read the elements of array
for(i=0;i<n;i++)
STEP 4: Call the function sel(a,0,n-1)
STEP 5: Print the sorted array a
STEP 6: Stop the program

## STEP 1: Declare the local variable.

STEP 2: Assign
begin =start and small=begin and check if
start < stop
STEP 3: If so then set a for loop
for(i=begin+1;i<=stop;i++)
STEP 4: Check the condition
x[i]<x[small]
STEP 6: If so then assign the value of i to small
Small=i
STEP 7: Then swap the values of x[begin] and x[small] using temp
temp=x[begin]
x[begin]=x[small]
x[small]=temp
STEP 8: Call another function sel(x,start+1,stop)
PROGRAM:

#include<stdio.h>
#include<conio.h>
void sel(int *[],int,int);
int main()
{
int a[100],i,n;
clrscr();
printf("\nEnter The number Of elements:");
scanf("%d",&n);
printf("\nEnter the array elements one by one\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("\nUNSORTED ARRAY ELEMENTS");
for(i=0;i<n;i++)
printf("\t%d",a[i]);
sel(a,0,n-1);
printf("SORTED ARRAY:\n");
for(i=0;i<n;i++)
{
printf("\t %d",a[i]);
}
getch();
return(0);

}
void sel(int *x[], int start, int stop)
{
int begin=start;
int small=begin;
int temp,i;
if(start<stop)
{
for(i=begin+1;i<=stop;i++)
{
if(x[i]<x[small])
small=i;
}
temp=x[begin];
x[begin]=x[small];
x[small]=temp;
sel(x,start+1,stop);
}
}
OUTPUT:

45
89
98
09
65

## UNSORTED ARRAY ELEMENTS 23 45 89 98 09 65

SORTED ARRAY 09 23 45 65 89 98
RESULT:

Thus the C-Program was written to implement selection sort using pointers and functions
and the output was verified successfully.
EX.NO: IMPLEMENTATION OF MERGE SORT
DATE:

AIM: To write a C-Program to implement merge sort using divide and conquer strategy

ALGORITHM:

## STEP 1: Start the program

STEP 2: Read the value of n
STEP 3: Set a for loop to read the elements of array
for(i=0;i<n;i++)
STEP 4: Call the function split(a,0,n-1)
STEP 5: Print the sorted array a
STEP 6: Stop the program

## STEP 1: Declare the local variable.

STEP 2: If low is less than high then assign the mean value of low
and high to mid
mid =(low+high)/2
STEP 3: Call the function merge_sort(a,low,mid)
STEP 4: Call the another function merge_sort(a,mid+1,high)
STEP 5: Call the function combine(a,low,mid,high)

## STEP 1: Declare the local variables

STEP 2: Set the while loop till the condition i<=mid && j<=high is failed
STEP 3: Check whether a[i]<a[j]
STEP 4: If so the assign the value of a[j] to temp[k] and increment j and k
temp[k]=a[i]
j++ k++
STEP 5: Else assign a[j] to temp[k] and then increment j and k
temp[k]=a[j] & j++ k++
STEP 6: Set another while loop till i is less than mid
STEP 7: Assign the value of a[i] to temp[k]
temp[k]=a[i] & j++ k++
STEP 8: Set another while loop till j is greater than mid
STEP 9: Assign the value of a[j] to temp[k]
temp[k]=a[j]
j++ k++
STEP 10: Construct a for loop for k
for(k=low; k<=high; k++)
STEP 11: Assign the value of temp[k] to a[k]
a[k]=temp[k]
PROGRAM:

#include<stdio.h>
#include<conio.h>
void split(int *,int,int);
void merge(int *,int,int,int,int);
int a[25],b[25];
void main()
{
int i,n;
clrscr();
printf("Enter the limit");
scanf("%d",&n);
printf("\n Enter the elements");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
split(a,0,n-1);
printf("\n The sorted list is:");
for(i=0;i<n;i++)
printf("\n %d",a[i]);
getch();
}
void split(int *c,int first,int last)
{
int mid;
if(first<last)
{
mid=(first+last)/2;
split(c,first,mid);
split(c,mid+1,last);
merge(c,first,mid,mid+1,last);
}
}
void merge(int *a,int f1,int l1,int f2,intl2)
{
int i,j,k=0;
i=f1;
j=f2;
while(i<=l1&&j<=l2)
{
if(a[i]<a[j])
b[k]=a[i++];
else
b[k]=a[j++];
k++;
}
while(i<=l1)
b[k++]=a[i++];
while(j<=l2)
i=f1;
j=0;
while(i<=l2&&j<k)
a[i++]=b[j++]
}

OUTPUT:
Enter the number of elements:6

45
89
98
09
65

## UNSORTED ARRAY ELEMENTS 23 45 89 98 09 65

SORTED ARRAY 09 23 45 65 89 98
RESULT:

Thus the C-Program was written to implement merge sort using pointers and functions
and the output was verified successfully.

## EX.NO: IMPLEMENTATION OF BINARY SEARCH WITH RECURSION

DATE:
AIM: To write a C-Program to implement binary search using recursive functions

ALGORITHM:

## STEP 1: Start the program

STEP 2: Read the value of n
STEP 3: Set a for loop to read the elements of array
for(i=0;i<n;i++)
STEP 4: Set a for loop
for(i=0;i<n;i++)
STEP 5: Nest another for loop
for(j=i+1;j<n;j++)
STEP 6: Check the condition a[i]>a[j]
STEP 7: If so swap the two values using temporary variable t as
t=a[i]
a[i]=a[j]
a[j]=t
STEP 8: Else go back to step 6.
STEP 9: Set a for loop to print the value of array a
For(i=0;i<n;i++)
STEP 10: Read the search key as k
STEP 11: Assign low=0 and high=n-1
STEP 12: Call the function binsearch(a,k,low,high)
STEP 13: Check if ans is not equal to1 if so print the position b+i
STEP 14: Stop the program

FUNCTION BINARY SEARCH (int *x[ ], int x, int low, int high)

## STEP 1: Set a while loop till low is greater than high

STEP 2: Assign mean value of low and high to mid
mid=(high+low)/2
STEP 3: Assign the value of x[mid] to p
p=x[mid]
STEP 4: Check if x<p if so assign
high=mid-1
STEP 5: Else check whether x>p if so then assign
low=mid+1
STEP 6: Else check whether x= =p, if so return mid
STEP 7: Else return -1

PROGRAM:
#include<stdio.h>
#include<conio.h>
binarysearch(int *[],int,int,int);
void main()
{
int i,j,k,t,low,high,n,a[50],ans;
clrscr();
printf("\n enter the N:");
scanf("%d",&n);
printf("\n enter the array element one by one\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("\n sorted array \n");
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<n;i++)
printf("\t a[%d]=%d\n",i,a[i]);
printf("\t enter the element to search:");
scanf("%d",&k);
low=0;
high=n-1;
ans=binarysearch(a,k,low,high);
if(ans!=-1)
printf("\nthe number %d is present in the list at location %d",k,ans);
else
printf(" the number is not present in the list");
getch();
}
int binarysearch(int *a[],int x,int low,int high)
{
int mid,p;
if(low>high)
return-1;
mid=(low+high)/2;
p=a[mid];
if(x==p)
return(mid);
else
if(x<p)
return binarysearch(a,x,low,mid-1);
else
return binarysearch(a,x,mid+1,high);
}

OUTPUT:
Enter the number of elements:6

## Enter the array elements 23

45
89
98
09
65

SORTED ARRAY 09 23 45 65 89 98

## The number is not present in the list

RESULT:

Thus the C-Program was written to implement binary search using recursive functions
and the output was verified successfully.

## EX.NO: IMPLEMENTATION OF BINARY SEARCH WITHOUT RECURSION

DATE:
AIM: To write a C-Program to implement binary search using non-recursive functions

ALGORITHM:

## STEP 1: Start the program

STEP 2: Read the value of n
STEP 3: Set a for loop to read the elements of array
for(i=0;i<n;i++)
STEP 4: Set a for loop
for(i=0;i<n;i++)
STEP 5: Nest another for loop
for(j=i+1;j<n;j++)
STEP 6: Check the condition a[i]>a[j]
STEP 7: If so swap the two values using temporary variable t as
t=a[i]
a[i]=a[j]
a[j]=t
STEP 8: Else go back to step 6.
STEP 9: Set a for loop to print the value of array a
for(i=0;i<n;i++)
STEP 10: Read the search key as k
STEP 11: Assign low=0 and high=n-1
STEP 12: Call the function binsearch(a,k,low,high)
STEP 13: Check if ans is not equal to1 if so print the position b+i
STEP 14: Stop the program

FUNCTION BINARY SEARCH (int *a[ ], int x, int low, int high)

## STEP 1: Check if low>high if so return -1

STEP 2: Else assign mean value of low and high to mid
mid=(high+low)/2
STEP 3: Assign the value of a[mid] to p
p=a[mid]
STEP 4: Check if x= =p if so then return mid
STEP 5: Else check whether x<p if so then return
binsearch(a,x,low,mid-1)
STEP 6: Else return
binsearch(a,x,mid+1,high)

PROGRAM:
#include<stdio.h>
#include<conio.h>
binarysearch(int *[],int,int);
void main()
{
int i,j,n,a[10],t,k,b;
clrscr();
printf(" ENTER THE NUMBER\n ");
scanf("%d",&n);
printf("Enter array elements\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("The sorted the array\n");
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<n;i++)
printf("%d",a[i]);
printf("\nEnter the search element\n");
scanf("%d",&k);
b=binarysearch(&a,n,k);
if(b!=-1)
printf("position:%d",b);
else
getch();
}
binarysearch(int *a[],int n,int k)
{
int mid,low,high,p;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
p=a[mid];
if(p>k)
high=mid-1;
else if(p<k)
low=mid+1;
else if(k==p)
return mid;
}
return-1;
}

OUTPUT:
Enter the number of elements:6

## Enter the array elements 23

45
89
98
09
65

SORTED ARRAY 09 23 45 65 89 98

## The number is not present in the list

RESULT:

Thus the C-Program was written to implement binary search without using recursive functions and
the output was verified successfully.

## EX.NO: IMPLEMENTATION OF QUICK SORT

DATE:
AIM: To write a C-Program to implement quick sort using pointers and functions

ALGORITHM:

## STEP 1: Start the program

STEP 2: Assign the pointer array *a[100] as global, read the value of n
STEP 3: Set a for loop to read the elements of array
for(i=0;i<n;i++)
STEP 4: Call the function sort(0,n-1)
STEP 5: Print the sorted array a
STEP 6: Stop the program

## STEP 1: Declare the local variable.

STEP 2: Check if first is less than last
first < last
STEP 3: If so then assign the following
pivot=a[first]
i=first
j=last
STEP 4: Assign a while loop till the condition
i<j
STEP 5: Assign a while loop to increment i till
a[i]<pivot and i< last
STEP 6: Assign a while loop to decrement j till
a[j] > pivot and j > first
STEP 7: Check whether i is than j if so then swap the values of a[i] and a[j]
temp=a[i]
a[j]=a[j]
a[j]=temp
STEP 8: Then swap the values of a[j] and a[first]
temp=a[j]
a[j]=a[first]
a[first]=temp
STEP 9: Call another functions sort(first, j-1) and sort(j+1, last)

PROGRAM:
#include<stdio.h>
#include<conio.h>
int *a[50],n,i;
void sort(int,int);
void main()
{
clrscr();
printf("Enter the No of Elements:");
scanf("%d",&n);
printf("Enter The Elements;");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("\nUNSORTED ARRAY ELEMENTS");
for(i=0;i<n;i++)
printf("\t%d",a[i]);
sort(0,n-1);
printf("\nSORTED ARRAY");
for(i=0;i<n;i++)
printf("%d",a[i]);
getch();
}
void sort(int first,int last)
{
int *temp,*pivot,i,j;
if(first<last)
{
pivot=a[first];
i=first;
j=last;
while(i<j)
{
while((a[i]<=pivot)&&(i<last))
i++;
while((a[j]>=pivot)&&(j>first))
j--;
if(i<j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[first];
a[first]=a[j];
a[j]=temp;
sort(first,j-1);
sort(j+1,last);
}
}

OUTPUT:
Enter the number of elements:6

45
89
98
09
65

## UNSORTED ARRAY ELEMENTS 23 45 89 98 09 65

SORTED ARRAY 09 23 45 65 89 98
RESULT:

Thus the C-Program was written to implement quick sort using functions and pointers and the output
was verified successfully.

## EX.NO: IMPLEMENTATION OF INSERTION SORT

DATE:
AIM: To write a C-Program to implement insertion sort using pointers and functions

ALGORITHM:

## STEP 1: Start the program

STEP 2: Read the value of n
STEP 3: Set a for loop to read the elements of array
for(i=0;i<n;i++)
STEP 4: Call the function ins_sort(a,n)
STEP 5: Print the sorted array a
STEP 6: Stop the program

## STEP 1: Declare the local variable.

STEP 2: Set a for loop for p
for(p=1;p<k;p++)
STEP 3: Assign the value of b[p] to temp
temp=b[p]
STEP 4: Set a nested for loop for j
for(j=p;j>0&&b[j-1]>temp;j--)
STEP 5: Assign the value of b[j-1] to b[j] and temp to b[j]
b[j]=b[j-1];
b[j]=temp;

## STEP 6: Assign a while loop to decrement j till

a[j] > pivot and j > first
STEP 7: Check whether i is than j if so then swap the values of a[i] and a[j]
temp=a[i]
a[j]=a[j]
a[j]=temp
STEP 8: Then swap the values of a[j] and a[first]
temp=a[j]
a[j]=a[first]
a[first]=temp
STEP 9: Call another functions sort(first, j-1) and sort(j+1, last)

PROGRAM:
#include<stdio.h>
#include<conio.h>
void ins_sort(int *a[], int n);
void main()
{
int i,n,*a[50];
clrscr();
printf("Enter the number of Elements");
scanf("%d",&n);
printf("\nEnter the array elements \n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("UNSORTED ARRAY:\n");
for(i=0;i<n;i++)
printf("\t%d",a[i]);
ins_sort(a,n);
printf("SORTED ARRAY:\n");
for(i=0;i<n;i++)
printf("\t%d",a[i]);
getch();
}
void ins_sort(int *b[], int k)
{
int j,p,*temp;
for(p=1;p<k;p++)
{
temp=b[p];
for(j=p;j>0&&b[j-1]>temp;j--)
b[j]=b[j-1];
b[j]=temp;
}

OUTPUT:
Enter the number of elements:6

45
89
98
09
65

## UNSORTED ARRAY ELEMENTS 23 45 89 98 09 65

SORTED ARRAY 09 23 45 65 89 98
RESULT:

Thus the C-Program was written to implement insertion sort using pointers and functions
and the output was verified successfully.

## EX.NO: IMPLEMENTATION OF 8 QUEEN PROBLEMS

DATE:
AIM: To write a C-Program to implement a 8 queen program using functions

ALGORITHM:

## STEP 1: Define the functions that are to be used

STEP 2: Assign a constant value of 8 to QUEENNO
STEP 3: Call the function placequeen(0,x)
STEP 4: Print the message “end”
STEP 5: Stop the program

## STEP 1: Declare local variables

STEP 2: Set a for loop for i
for(i=0;i<8;i++)
STEP 3: Check for result of function canbeplaced(k,i,x)
STEP 4: If it is 1 then assign the value of i to x[k]
x[k]=i;
STEP 5: Check if k is equal to 7 if show call the function showboard(x)
STEP 6: Read the value of ch from the user
STEP 7: If the value is equal to n or N then exit
STEP 8: Check whether k is less than 7 if so then call the function placequeen(k+1,x)

## STEP 1: Declare the local variables

STEP 2: Set a for loop for j
for(j=0;j<k;j++)
STEP 3: Check for the following condition
if((abs(j-k)==abs(x[j]-i)||(x[j]==i)))
STEP 4: If its true return 0 else return 1

## STEP 1: Declare the local variables

STEP 2: Set all the display style in printf function
STEP 3: Set a for loop for i to print 1,2,..8 vertically and horizontally
for(i=0;i<8;i++)
STEP 4: Set another for loop for j and check whether j is equal to x[i]
for(j=0;j<8;j++)
STEP 5: If so then print Q else print -

PROGRAM:
#include<stdio.h>
#include<conio.h>
#define QUEENNO 8
void placequeen(int,int*);
int canbeplaced(int,int,int*);
void showboard(int*);
void main()
{
int x[QUEENNO],i;
clrscr();
printf("the 8 queens problem");
placequeen(0,x);
printf("end");
getch();
}
void placequeen(int k,int *x)
{
int i,j;
char ch;
for(i=0;i<8;i++)
{
if(canbeplaced(k,i,x))
{
x[k]=i;
if(k==7)
{
showboard(x);
printf("want to see more?[n->stop, any-> continue]:");
scanf("%c",&ch);
if(ch=='n' || ch=='N')
exit(0);
}
if(k<7)
placequeen(k+1,x);
}
}
}
int canbeplaced(int k,int i,int *x)
{
int j;
for(j=0;j<k;j++)
{
if((abs(j-k)==abs(x[j]-i))||(x[j]==i)))
return 0;
}
return 1;
}
void showboard(int *x)
{
int i,j;
printf("\n----------------------------------------------\n");
printf(" ");
for(i=0;i<8;i++)
{
printf("%d",(i+1));
printf(" ");
}
for(i=0;i<8;i++)
{
printf("\n\n%d",(i+1));
for(j=0;j<8;j++)
{
if(j==x[i])
printf("Q");
else
printf("-");
printf(" ");
}
printf("");
}
printf("\n----------------------------------------------");

OUTPUT:
The 8 queens’ problem

------------------
1 2 3 4 5 6 7 8
1 Q - - - - - - -
2 - - Q - - - - -
3 - - - - Q - - -
4 - - - - - - Q -
5 – Q - - - - - -
6 - - - Q - - - -
7 - - - - - Q - -
8 - - - - - - - Q
------------------ want to see more?[n->stop, any-> continue]: n
RESULT:

Thus the C-Program was written to implement an 8 queen program using functions
and the output was verified successfully.

## EX.NO: IMPLEMENTATION OF MINIMUM SPANNING TREE

DATE:

AIM: To write the C-Program to implement minimum spanning tree using structures, pointers and
functions

ALGORITHM:

## STEP 1: Start the program

STEP 2: Assign MAX a constant value of 20
STEP 3: Declare a structure edge with structure variable *front
STEP 4: Define the functions and variables required in the program globally
STEP 5: Call the function create_graph() inside the main function
STEP 6: Call the function make_tree()
STEP 7: Set a for loop using i
for(i=1;i<=count;i++)
STEP 8: Print the values of tree[i].u and tree[i].v
STEP 9: Stop the program

FUNCTION OF CREATE_GRAPH ( )

## STEP 1: Declare the local variables

STEP 2: Read the number of nodes n
STEP 3: Calculate the value of max_edge as
max_edge=n*(n-1)/2
STEP 4: Set a for loop using i
for(i=0;i<=max_edge;i++)
STEP 5: Read the values of origin and destin
STEP 6: Check whether origin and destin are equal to 0
STEP 7: If so exit the loop using break statement
STEP 8: Read the weight of the current edge wt
STEP 9: Check the following condition
if(origin>n||destin>n||origin<=0||destin <=0)
STEP 10: If any of the condition is true, print “invalid edge!” and decrement the value of i by 1
STEP 11: Else call the function insert_pque(origin,destin,wt)
STEP 12:Check whether i is less than n-1, if so then exit with an error message

FUNCTION OF MAKE_TREE ( )

## STEP 1: Declare the local variables

STEP 2: Initialize the variable tmp,node1,node2
STEP 3: Assign the values for node1, node2
STEP 4: Calculate and print the values of root_n1 and root_n2.
STEP 5: If the two roots are not equal, call the function inset_tree
STEP 6: Assign the value of root_n1 to father[root_n2]
FUNCTION OF INSERT_TREE (int i, int j, int wt )

## STEP 1: Declare the local variables

STEP 2: Increment the value of count
STEP 3: Assign values to tree[count].u, tree[count].v, tree[count].weight.

## STEP 1: Declare the local variables

STEP 2: Allocate the memory space of size, struct edge for tmp
STEP 3: Assign values to tmp->u, tmp->v, tmp->weight.
STEP 4: Check for the following condition.
if(front==NULL||tmp->weight<front->weight)
STEP 5: If any of the conditions are true assign the value of front to tmp->link and assign tmp to
front
STEP 6: else set a while loop and declare following

## STEP 1: Declare the local variable

STEP 2: Assign the value of front to temp
STEP 3: print the values of processed edge and return the value of tmp
PROGRAM:

#include<stdio.h>
#include<conio.h>
#define MAX 20
struct edge
{
int u;
int v;
int weight;
}
*front=NULL;
int father[MAX];
struct edge tree[MAX];
int n;
int wt_tree=0;
int count=0;
void make_tree();
void insert_tree(int i, int j, int wt);
void insert_pque(int i, int j, int wt);
struct edge *del_pque();
void main()
{
int i;
create_graph();
make_tree();
clrscr();
printf("edge to be included in spanning tree are:\n");
for(i=1;i<=count;i++)
{
printf("%d->",tree[i].u);
printf("%d\n",tree[i].v);
}
printf("weight of this minimum spanning tree is: %d\n",wt_tree);
getch();
}
create_graph()
{
int i,wt,max_edge,origin,destin;
printf("enter no. of nodes");
scanf("%d",&n);
max_edge=n*(n-1)/2;
for(i=0;i<=max_edge;i++)
{
printf("enter edge %d(0 0 to quit):",i);
scanf("%d%d",&origin,&destin);
if((origin==0)&&(destin==0))
break;
printf("enter weight for this ecge");
scanf("%d",&wt);
if(origin>n||destin>n||origin<=0||destin <=0)
{
printf("invalid edge!");
i--;
}
else insert_pque(origin,destin,wt);
}
if(i<n-1)
{
printf("spanning tree is not possible");
exit(1);
}
return 0;
}
void make_tree()
{
struct edge *tmp;
int node1,node2,root_n1,root_n2;
while(count<n-1)
{
tmp=del_pque();
node1=tmp->u;
node2=tmp->v;
printf("n1=%d",node1);
printf("n2=%d",node2);
while(node1>0)
{
root_n1=node1;
node1=father[node1];
}
while(node2>0)
{
root_n2=node2;
node2=father[node2];
}
printf("rootn1=%d\n",root_n1);
printf("rootn2=%d\n",root_n2);
if(root_n1!=root_n2)
{
insert_tree(tmp->u,tmp->v,tmp->weight);
wt_tree=wt_tree+tmp->weight;
father[root_n2]=root_n1;
}
}
}
void insert_tree(int i, int j, int wt)
{
printf("This Edge inserted in the spanning tree\n");
count++;
tree[count].u=i;
tree[count].v=j;
tree[count].weight=wt;
}
void insert_pque(int i, int j, int wt)
{
struct edge *tmp, *q;
tmp=(struct edge *)malloc(sizeof(struct edge));
tmp->u=i;
tmp->v=j;
tmp->weight=wt;
if(front==NULL||tmp->weight<front->weight)
{
front=tmp;
}
else
{
q=front;
}
}
struct edge *del_pque()
{
struct edge *tmp;
tmp=front;
printf("Edge Processed is %d->%d%d\n",tmp->u,tmp->v,tmp->weight);
}
OUTPUT:

NUMBER OF NODES: 3
Enter the Edge 1:2 2
Enter the weight: 1
Enter the Edge 2:2 3
Enter the weight: 2
Enter the Edge 3:2 1
Enter the weight: 5

## THE MINIMUM SPANNING TREE WEIGHT IS 7

RESULT:

Thus the C-Program was written to implement minimum spanning tree using structures, pointers and
functions and the output was verified successfully.