C Programming Using Pointers
C Programming Using Pointers
AIM:
To write a C-Program to implement a recursive algorithm using pointers
ALGORITHM:
#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:
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:
#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:
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:
#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:
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:
#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
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.
ALGORITHM:
FUNCTION BINARY SEARCH (int *x[ ], int x, int low, int high)
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
SORTED ARRAY 09 23 45 65 89 98
Thus the C-Program was written to implement binary search using recursive functions
and the output was verified successfully.
ALGORITHM:
FUNCTION BINARY SEARCH (int *a[ ], int x, int low, int 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
printf("search element not found\n");
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
SORTED ARRAY 09 23 45 65 89 98
Thus the C-Program was written to implement binary search without using recursive functions and
the output was verified successfully.
ALGORITHM:
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
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.
ALGORITHM:
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
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.
ALGORITHM:
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.
AIM: To write the C-Program to implement minimum spanning tree using structures, pointers and
functions
ALGORITHM:
FUNCTION OF CREATE_GRAPH ( )
FUNCTION OF MAKE_TREE ( )
#include<stdio.h>
#include<conio.h>
#define MAX 20
struct edge
{
int u;
int v;
int weight;
struct edge *link;
}
*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)
{
tmp->link=front;
front=tmp;
}
else
{
q=front;
while(q->link!=NULL&&q->link->weight<=tmp->weight)
q=q->link;
tmp->link=q->link;
q->link=tmp;
if(q->link==NULL)
tmp->link=NULL;
}
}
struct edge *del_pque()
{
struct edge *tmp;
tmp=front;
printf("Edge Processed is %d->%d%d\n",tmp->u,tmp->v,tmp->weight);
front=front->link;return tmp;
}
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
Thus the C-Program was written to implement minimum spanning tree using structures, pointers and
functions and the output was verified successfully.