Professional Documents
Culture Documents
Dsaa
Dsaa
MCA (2021-2023)
Practical File
.
Q 1: Write a program to implement linked list and also print all the elements of the
same
#include <stdio.h>
#include <stdlib.h>
struct node
{
int num;
struct node *nextptr;
}*stnode;
int main()
{
int n;
printf("\n\n Linked List : To create and display Singly Linked List :\n");
printf("-------------------------------------------------------------\n");
if(stnode == NULL)
{
printf(" Memory can not be allocated.");
}
else
{
printf(" Input data for node 1 : ");
scanf("%d", &num);
stnode->num = num;
stnode->nextptr = NULL;
tmp = stnode;
for(i=2; i<=n; i++)
{
fnNode = (struct node *)malloc(sizeof(struct node));
if(fnNode == NULL)
{
printf(" Memory can not be allocated.");
break;
}
else
{
fnNode->num = num;
fnNode->nextptr = NULL;
OUTPUT 1:
Q 2: Write a program to implement the stack using
#include<stdio.h>
stackSize){
if(*top == -1){
stack[stackSize - 1] = element;
*top = stackSize - 1;
}
else if(*top == 0){
printf("The stack is already full. \n");
}
else{
stack[(*top) - 1] = element;
(*top)--;
}}
void pop(char stack[], int *top, int stackSize){
if(*top == -1){
printf("The stack is empty. \n");
}
else{
printf("Element popped: %c \n", stack[(*top)]);
// If the element popped was the last element in the stack
// then set top to -1 to show that the stack is empty
if((*top) == stackSize - 1){
(*top) = -1;
}
else{
(*top)++;
} }}
int main() {
int stackSize = 4;
char stack[stackSize];
// A negative index shows that the stack is empty
int top = -1;
push('a', stack, &top, stackSize);
printf("Element on top: %c\n", stack[top]);
push('b',stack, &top, stackSize);
printf("Element on top: %c\n", stack[top]);
pop(stack, &top, stackSize);
printf("Element on top: %c\n", stack[top]);
pop(stack, &top, stackSize);
printf("Top: %d\n", top);
pop(stack, &top, stackSize);
return 0;}
OUTPUT 2:
Q 3: Write a program to implement queue using
array.
#include<stdio.h>
#define n 5
int main()
int queue[n],ch=1,front=0,rear=0,i,j=1,x=n;
\n4.Exit");
while(ch)
scanf("%d",&ch);
switch(ch)
case 1:
if(rear==x)
else
scanf("%d",&queue[rear++]);
break;
case 2:
if(front==rear)
{
printf("\n Queue is empty"); }
else {
%d",queue[front++]);
x++; }
break;
case 3:
if(front==rear)
else
{ printf("%d",queue[i]);
printf("\n"); }
break;
case 4:
exit(0);
default:
the options"); } } }
return 0;}
OUTPUT 3:
Q 4:Write a program to perform in insertion in a queue using
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 6
int intArray[MAX];
int front = 0;
int itemCount = 0;
int peek ()
{ return intArray[front];
bool isEmpty ()
{ return itemCount == 0;
bool isFull ()
int size ()
{ return itemCount;
{ if (!isFull ())
{ if (rear == MAX - 1)
{ rear = -1;
}
intArray[++rear] = data;
itemCount++;
}}
int dequeue()
if (front == MAX)
front = 0; }
itemCount--;
return data;
int main ()
enqueue (3);
enqueue (5);
enqueue (9);
enqueue (1);
enqueue (12);
enqueue (15);
if (isFull ())
enqueue (16);
enqueue (17);
enqueue (18);
printf ("----------------------\n");
printf ("----------------------\n");
int n = dequeue();
Output 4:
Q 5: Write a program to perform binary search on a given list.
#include <stdio.h>
int binarySearch(int a[], int beg, int end, int val)
{
int mid;
if(end >= beg)
{ mid = (beg + end)/2;
if(a[mid] == val) {
return mid+1;
}
else if(a[mid] < val) {
return binarySearch(a, mid+1, end, val);
}
else {
return binarySearch(a, beg, mid-1, val);
} }
return -1; }
int main() {
int a[] = {11, 14, 25, 30, 40, 41, 52, 57, 70}; // given array
int val = 40; // value to be searched
int n = sizeof(a) / sizeof(a[0]); // size of array
int res = binarySearch(a, 0, n-1, val); // Store result
printf("The elements of the array are - ");
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\nElement to be searched is - %d", val);
if (res == -1)
printf("\nElement is not present in the array");
else
printf("\nElement is present at %d position of array", res);
return 0;
}
OUTPUT 5:
Q 6: Write a program for insertion and
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
if (root == NULL) {
return createNode(data);
} return root;
current = current->left;
}
return current;}
if (root == NULL) {
return root; }
} else {
if (root->left == NULL) {
free(root);
return temp;
free(root);
return temp;
root->data = temp->data;
} return root;}
if (root != NULL) {
inorderTraversal(root->left);
inorderTraversal(root->right); }
}int main() {
inorderTraversal(root);
printf("\n");
inorderTraversal(root);
printf("\n");
return 0;
OUTPUT 6:
Q 7,8: Write a program to implement Insertion sort
#include <stdio.h>
int main(){
int n, i, j,
temp; int
arr[64];
scanf("%d", &n);
printf("Enter %d integers\n",
{scanf("%d", &arr[i]);
{j = i;
while ( j > 0 && arr[j-1] > arr[j])
{temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp;
j--;}}
printf("Sorted list in ascending order:\n"); for (i =
0; i <= n - 1; i++){
printf("%d\n", arr[i]);}
return 0;}Output 7 :-
Q 9: Write a program to implement selection sort on a list to arrange it in decending order.
#include <stdio.h>
int main()
{
int arr[] = {5, 2, 8, 7, 1};
int temp = 0;
int length = sizeof(arr)/sizeof(arr[0]);
printf("Elements of original array: \n");
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]);
}
for (int i = 0; i < length; i++) {
for (int j = i+1; j < length; j++) {
if(arr[i] < arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp; } } }
printf("\n");
printf("Elements of array sorted in descending order: \n");
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]); }
return 0; }
OUTPUT 9:-
Q 10: Write a program to implement bubble sort on a list to arrange it in ascending order.
#include <stdio.h>
int i, j;
swap(&arr[j], &arr[j+1]);}}}
*b = temp;}
int main()
scanf("%d", &array[i]);
bubblesort(array, size);
return 0;
OUTPUT 10:-
Q 11:Write a C program to implement Heap Sort.
#include<stdio.h>
void heapsort(int[],int);
void heapify(int[],int);
void adjust(int[],int);
main() {
int n,i,a[50];
system("clear");
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
heapsort(a,n);
for (i=0;i<n;i++)
printf("\t%d",a[i]);
printf("\n");}
int i,t;
heapify(a,n);
for (i=n-1;i>0;i--) {
t = a[0];
a[0] = a[i];
a[i] = t;
adjust(a,i);}}
void heapify(int a[],int n) {
int k,i,j,item;
for (k=1;k<n;k++) {
item = a[k];
i = k;
j = (i-1)/2;
while((i>0)&&(item>a[j])) {
a[i] = a[j];
i = j;
j = (i-1)/2;}
a[i] = item;}}
int i,j,item;
j = 0;
item = a[j];
i = 2*j+1;
while(i<=n-1) {
if(a[i] <a[i+1])
i++;
if(item<a[i]) {
a[j] = a[i];
j = i;
i = 2*j+1;
} else
break;}
a[j] = item;}
OUTPUT 11:
Q 12: Write a program to implement quick sort.
#include <stdio.h>
scanf("%d", &size);
scanf("%d", &list[i]);
}
quicksort(list, 0, size - 1); printf("After applying quick sort\n"); for (i = 0; i < size; i++){printf("%d ",
list[i]);}printf("\n"); return 0;
}
void quicksort(int list[], int low, int high)
i = low;
j = high;
while (i<j)
while(list=
list[pivot]
&& i <=
high)
{ i+
+;}while
(list[j] >
list[pivot]
&& j >low)
{j--;}
if (i < j)
{
temp=
list[i]; list[i]
= list[j];
list[j]=
temp;}}
temp=
list[j];
list[j]=list[pi
vot];
list[pivot] =
temp;
quicksort(lis
t, low, j - 1);
quicksort(lis
t, j+
1high);}
Output 12:
Q 13: Write a program to implement BFS & DFS.
#include<stdio.h>
int q[20],top=-1,front=-1,rear=-1,a[20][20],vis[20],stack[20];
int delete();
void add(int item);
void bfs(int s,int n);
void dfs(int s,int n);
void push(int item);
int pop();
void main()
{
int n,i,s,ch,j;
char c,dummy;
printf("ENTER THE NUMBER VERTICES ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("ENTER 1 IF %d HAS A NODE WITH %d ELSE 0 ",i,j);
scanf("%d",&a[i][j]);
}
}
printf("THE ADJACENCY MATRIX IS\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf(" %d",a[i][j]);
}
printf("\n");
}
do
{
for(i=1;i<=n;i++)
vis[i]=0;
printf("\nMENU");
printf("\n1.B.F.S");
printf("\n2.D.F.S");
printf("\nENTER YOUR CHOICE");
scanf("%d",&ch);
printf("ENTER THE SOURCE VERTEX :");
scanf("%d",&s);
switch(ch)
{
case 1:bfs(s,n);
break;
case 2:
dfs(s,n);
break;
}
printf("DO U WANT TO CONTINUE(Y/N) ? ");
scanf("%c",&dummy);
scanf("%c",&c);
}while((c=='y')||(c=='Y'));
}
//**************BFS(breadth-first search) code**************//
void bfs(int s,int n)
{
int p,i;
add(s);
vis[s]=1;
p=delete();
if(p!=0)
printf(" %d",p);
while(p!=0)
{
for(i=1;i<=n;i++)
if((a[p][i]!=0)&&(vis[i]==0))
{
add(i);
vis[i]=1;
}
p=delete();
if(p!=0)
printf(" %d ",p);
}
for(i=1;i<=n;i++)
if(vis[i]==0)
bfs(i,n);
}
#include <stdio.h>
void main()
{int num;
scanf("%d", &num);
int array[num];
scanf("%d", &array[i]);}
scanf("%d", &keynum);
if (keynum == array[i] ){
found = 1; break;}}
if (found == 1)
%d",i+1); else
#include<limits.h
>#include<stdio.h
>#include<stdlib.
int top;
unsigned
capacity;
int* array;
stack->array = (int*)malloc(stack->capacity *
stack->array[++stack->top] = item;
return 0;
Output 15:
Q 16: Write a program to implement binary tree traversal.
#include <stdio.h>
#include <stdlib.h>
struct tnode {
int data;
struct tnode *left, *right;
};
int main() {
int data, ch;
while (1) {
printf("\n1. Insertion\n2. Pre-order\n");
printf("3. Post-order\n4. In-order\n");
printf("5. Exit\nEnter your choice:");
scanf("%d", &ch);
switch (ch) {
case 1:
printf("Enter ur data:");
scanf("%d", &data);
insertion(&root, data);
break;
case 2:
preOrder(root);
break;
case 3:
postOrder(root);
break;
case 4:
inOrder(root);
break;
case 5:
exit(0);
default:
printf("U've entered wrong opetion\n");
break;
}}
return 0;
}
Output 16:
Q 17: Write a program to implement quick sort
#include <stdio.h>
int partition (int a[], int start, int end) {
int pivot = a[end int i = (start - 1);
for (int j = start; j <= end - 1; j++)
{ if (a[j] < pivot) {
i++;
int t = a[i];
a[i] = a[j];
a[j] = t; } }
int t = a[i+1];
a[i+1] = a[end];
a[end] = t;
return (i + 1);
} void quick(int a[], int start, int end) {
if (start < end) {
int p = partition(a, start, end); //p is the partitioning index
quick(a, start, p - 1);
quick(a, p + 1, end); } }
void printArr(int a[], int n) {
int i;
for (i = 0; i < n; i++)
printf("%d ", a[i]);
} int main() {
int a[] = { 24, 9, 29, 14, 19, 27 };
int n = sizeof(a) / sizeof(a[0]);
printf("Before sorting array elements are - \n");
printArr(a, n);
quick(a, 0, n - 1);
printf("\nAfter sorting array elements are - \n");
printArr(a, n);
return 0; }
OUTPUT 17:
Q 18: Write a program to implement Dijkstra algorithm.
#include<stdio.h>
#include<conio.h>
#define INFINITY
9999
#define MAX 10
void dijkstra(int G[MAX][MAX],int n,int startnode); int main()
{
int G[MAX][MAX],i,j,n,u;
printf("Enter no. of vertices:");
scanf("%d",&n);
printf("\nEnter the adjacency matrix:\
n"); for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&G[i][j]); printf("\
nEnter the starting node:");
scanf("%d",&u);
dijkstra(G,n,u)
; return 0;}
void dijkstra(int G[MAX][MAX],int n,int startnode)
{
int cost[MAX]
[MAX],distance[MAX],pred[MAX]; int
visited[MAX],count,mindistance,nextnode,i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(G[i][j]==0)
cost[i][j]=INFINITY;
else cost[i]
[j]=G[i][j];
for(i=0;i<n;i++)
{
distance[i]=cost[startnode]
[i]; pred[i]=startnode;
visited[i]=0;
}
distance[startnode]=
0;
visited[startnode]=1
; count=0;
while(count<n-1)
{
mindistance=INFINITY;
for(i=0;i<n;i++)
if(distance[i]<mindistance&&!visited[i])
{
mindistance=distance[i];
nextnode=i;
}
visited[nextnode]=1;
for(i=0;i<n;i++)
if(!visited[i]) if(mindistance+cost[nextnode]
[i]<distance[i])
{
distance[i]=mindistance+cost[nextnode
][i]; pred[i]=nextnode;
}
count++;
}
for(i=0;i<n;i++) if(i!
=startnode)
{
printf("\nDistance of node %d=%d",i,distance[i]); printf("\
nPath=%d",i);
j=i
;
do
{
j=pred[j];
printf("<-
%d",j);
}while(j!=startnode);
}
}
Output 18:-
Q 19: Write a program to implement merge sort.
#include <stdio.h>
int main() {
int list[50]; int i, size;
printf("Enter total number of elements:”);
scanf("%d", &size);
size; i++){
scanf("%d", &list[i]);}
printf("%d ",list[i]);
}return 0;
{
int mid; if(low < high)
{
mid = (low + high) / 2; partition(list, low, mid); partition(list, mid + 1, high); mergeSort(list, low, mid,
high);}}
void mergeSort(int list[],int
temp[50]; lo = low;
i = low;
mi = mid + 1;
list[lo]; lo++;
}else
temp[i] =
list[k]; i++;
}}
else
temp[i] =
list[k]; i++;
}}
for (k = low; k <= high; k++)
{
list[k] = temp[k];
}}
Output 19:-
Q 20: Write a Program to implement Prim’s Algorithm.
#include<stdio.h>
#include<stdlib.h>
int G[MAX][MAX],spanning[MAX]
int main()
{
int i,j,total_cost;
printf("Enter no. of vertices:");
scanf("%d",&n);
printf("\nEnter the adjacency matrix:\
n"); for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&G[i][j]);
total_cost=prims(); printf("\
nspanning tree matrix:\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%d\t",spanning[i][j]);
}
printf("\n\nTotal cost of spanning tree=
%d",total_cost); return 0;
}
int prims()
{
int cost[MAX][MAX];
int
u,v,min_distance,distance[MAX],from[MAX];
int visited[MAX],no_of_edges,i,min_cost,j;
//create cost[][] matrix,spanning[][]
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ if(G[i]
[j]==0)
cost[i][j]=infinity;
else cost[i]
[j]=G[i][j];
spanning[i][j]=0;
}
distance[0]=0;
visited[0]=1;
for(i=1;i<n;i++)
{
distance[i]=cost[0][i];
from[i]=0;
visited[i]=0;
}
min_cost=0;
no_of_edges=n-1;
while(no_of_edges>
0)
{
min_distance=infinit
y; for(i=1;i<n;i++)
if(visited[i]==0&&distance[i]<min_distance)
{
v=i;
min_distance=distance[i]
}
u=from[v]; spanning[u]
[v]=distance[v];
spanning[v]
[u]=distance[v];
no_of_edges--;
visited[v]=1;
for(i=1;i<n;i++)
if(visited[i]==0&&cost[i][v]<distance[i])
{
distance[i]=cost[i][v];
from[i]=v;
}
min_cost=min_cost+cost[u][v];
}
return(min_cost);
}
Output 20:-
edgelist elist;
int G[MAX][MAX],n;
edgelist spanlist;
void kruskal();
int find(int belongs[],int vertexno);
void union1(int belongs[],int c1,int c2);
void sort();
void print();
void main()
{
int i,j,total_cost;
printf("\nEnter number of vertices:");
scanf("%d",&n);
printf("\nEnter the adjacency matrix:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&G[i][j]);
kruskal();
print();
}
void kruskal(){
int belongs[MAX],i,j,cno1,cno2;
elist.n=0;
for(i=1;i<n;i++)
for(j=0;j<i;j++)
{ if(G[i][j]!
=0{
elist.data[elist.n].u=i;
elist.data[elist.n].v=j;
elist.data[elist.n].w=G[i][j]; elist.n++;
}}
sort();
for(i=0;i<n;i++)
belongs[i]=i;
spanlist.n=0;
for(i=0;i<elist.n;i++)
{
cno1=find(belongs,elist.data[i].u);
cno2=find(belongs,elist.data[i].v);
if(cno1!=cno2)
{
spanlist.data[spanlist.n]=elist.data[i];
spanlist.n=spanlist.n+1;
union1(belongs,cno1,cno2);
}}}
int find(int belongs[],int vertexno){
return(belongs[vertexno]);
}
void union1(int belongs[],int c1,int c2){
int i; for(i=0;i<n;i+
+)
if(belongs[i]==c2)
belongs[i]=c1;
}void sort()
{
int i,j;
edge temp;
for(i=1;i<elist.n;i++)
for(j=0;j<elist.n-1;j++)
if(elist.data[j].w>elist.data[j+1].w)
{
temp=elist.data[j];
elist.data[j]=elist.data[j+1];
elist.data[j+1]=temp;
}}
void print(){
int i,cost=0;
for(i=0;i<spanlist.n;i++)
{
printf("\n%d\t%d\t%d",spanlist.data[i].u,spanlist.data[i].v,spanlist.data[i].w);
cost=cost+spanlist.data[i].w;
}
printf("\n\nCost of the spanning tree=%d",cost);
}
OUTPUT 21:
Output 22:
newNode->next = current->next;
current->next = newNode;
}
insertAtBeginning(&head, 3);
insertAtBeginning(&head, 2);
insertAtBeginning(&head, 1);
insertAtEnd(&head, 4);
insertAtEnd(&head, 5);
printf("List after inserting at the end: ");
printList(head);
insertAtMiddle(&head, 10, 2);
insertAtMiddle(&head, 7, 4);
int n;
scanf("%d",&n);
return 0;
if (n>=1)
return n*multiplyNumbers(n-
1); else
return 1;
Output 24 :-
int main()
int n1=0,n2=1,n3,i,number;
elements:");
scanf("%d",&number);
n3=n1+n2;
printf("
%d",n3);
n1=n2;
n2=n3;
return 0;
Output 25 :-