Dfs File FINAL
Dfs File FINAL
MCA - 168
#include <stdio.h>
#define size 6
int main() {
OUTPUT
Bubble Sort
OUTPUT
ShellSort
OUTPUT
Insertion Sort
OUTPUT
Selection Sort
OUTPUT
#include <stdio.h>
int mat2[3][3] = {
{9, 8, 7},
{6, 5, 4},
{3, 2, 1}
};
//int m3[3][3];
int tp[3][3];
int summ[3][3];
int mult[3][3];
printf("Matrix 1:\n");
display(mat1);
printf("\nMatrix 2:\n");
display(mat2);
T(mat1, tp);
printf("\nTranspose of Matrix 1:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%4d", tp[i][j]);
}
printf("\n");
}
addn(mat1, mat2, summ);
printf("\nMatrix Addition :\n");
display(summ);
#include <stdio.h>
#define MAX 10
int main() {
int matrix1[MAX][MAX] = { {0, 5, 0}, {8, 0, 0}, {0, 0, 7} };
int matrix2[MAX][MAX] = { {0, 0, 3}, {0, 6, 0}, {0, 0, 0} };
int result[MAX][MAX] = {0};
int numRows = 3, numCols = 3;
printf("Matrix 1:\n");
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
if (matrix1[i][j] != 0) {
printf("Row: %d, Col: %d, Value: %d\n", i, j, matrix1[i][j]);
}
}
}
printf("\nMatrix 2:\n");
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
if (matrix2[i][j] != 0) {
printf("Row: %d, Col: %d, Value: %d\n", i, j, matrix2[i][j]);
}
}
}
return 0;
}
OUTPUT
#include <stdio.h>
#define MAX 10
int stack[MAX];
int top = -1;
if (val != -1) {
printf("Top element: %d\n", val);}
break;
case 4:
return 0;
default:
printf("Invalid choice!\n");}
}return 0;}
OUTPUT
Q5. Standard queue in an Array.
#include <stdio.h>
#define MAX 10
int queue[MAX];
int f= -1, r = -1;
void enqueue(int value) {
if (r == MAX - 1) {
printf("Queue Overflow!\n");
return;
}
if (f== -1 && r == -1) {
f= r= 0;
} else {
r++;
}
queue[r] = value;
}
int dequeue() {
if (f == -1 || f > r) {
printf("Queue Underflow!\n");
return -1;
}
int val = queue[f];
f++;
return val;
}
int peek() {
if (f == -1 || f > r) {
printf("Queue is empty!\n");
return -1;
}
return queue[f];
}
int main() {
int choice, val;
while (1) {
printf("\n--- Operations on Queue ---\n");
printf("1. Enqueue\n2. Dequeue\n3. Peek\n4.Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter value to enqueue: ");
scanf("%d", &val);
enqueue(val);
break;
case 2:
dequeue();
break;
case 3:
val = peek();
if (val != -1) {
printf("Front element: %d\n", val); }
break;
case 4:
return 0;
break;
default:
printf("Invalid choice!\n");}
}
return 0;}
OUTPUT
#include <stdio.h>
#define SIZE 6
int queue[SIZE];
int front = -1, rear = -1;
void enqueue(int value) {
if (front == (rear + 1) % SIZE) {
printf("Queue is Full!\n");
} else {
if (front == -1) {
front = 0;
}
rear = (rear + 1) % SIZE;
queue[rear] = value;
printf("Inserted %d\n", value);
}
}
void dequeue() {
if (front == -1) {
printf("Queue is Empty!\n");
} else {
printf("Deleted %d\n", queue[front]);
if (front == rear) {
front = rear = -1;
} else {
front = (front + 1) % SIZE;
}
}
}
void display() {
if (front == -1) {
printf("Queue is Empty!\n");
} else {
printf("Queue elements are: ");
int i = front;
while (1) {
printf("%d ", queue[i]);
if (i == rear) break;
i = (i + 1) % SIZE;
}
printf("\n");}
}
int main() {
enqueue(10);
enqueue(20);
enqueue(30);
enqueue(40);
enqueue(50);
enqueue(60);
enqueue(50);
display();
dequeue();
dequeue();
display();
enqueue(70);
enqueue(80);
display();
return 0;}
OUTPUT
#include <stdio.h>
#define SIZE 5
int deque[SIZE];
int f = -1, r = -1;
int isFull() {
return (f == 0 && r == SIZE - 1) || (f == r + 1);
}
int isEmpty() {
return (f == -1);
}
void deleteFront() {
if (isEmpty()) {
printf("Deque is Empty!\n");
return;
}
printf("Deleted %d from front\n", deque[f]);
if (f == r) {
f = r = -1;
} else if (f == SIZE - 1) {
f = 0;
} else {
f++;
}
}
void deleteRear() {
if (isEmpty()) {
printf("Deque is Empty!\n");
return;
}
printf("Deleted %d from rear\n", deque[r]);
if (f == r) {
f = r = -1;
} else if (r == 0) {
r = SIZE - 1;
} else {
r--;
}
}
void display() {
if (isEmpty()) {
printf("Deque is Empty!\n");
return;
}
printf("Deque elements: ");
int i = f;
while (1) {
printf("%d ", deque[i]);
if (i == r) break;
i = (i + 1) % SIZE;
}
printf("\n");
}
int main() {
insertRear(10);
insertRear(20);
insertRear(30);
display();
deleteFront();
display();
deleteRear();
display();
return 0;}
OUTPUT
#include <stdio.h>
#define SIZE 5
int deque[SIZE];
int f = -1, r = -1;
int isFull() {
return (f == 0 && r == SIZE - 1) || (f == r + 1);
}
int isEmpty() {
return (f == -1);
}
void insertRear(int value) {
if (isFull()) {
printf("Deque is Full!\n");
return;
}
if (isEmpty()) {
f = r = 0;
} else if (r == SIZE - 1) {
r = 0;
} else {
r++;
}
deque[r] = value;
printf("Inserted %d at rear\n", value);
}
void insertFront(int value) {
if (isFull()) {
printf("Deque is Full!\n");
return;
}
if (isEmpty()) {
f = r = 0;
} else if (f == 0) {
f = SIZE - 1;
} else {
f--;
}
deque[f] = value;
printf("Inserted %d at front\n", value);
}
void deleteFront() {
if (isEmpty()) {
printf("Deque is Empty!\n");
return;
}
printf("Deleted %d from front\n", deque[f]);
if (f == r) {
f = r = -1;
} else if (f == SIZE - 1) {
f = 0;
} else {
f++;
}
}
void display() {
if (isEmpty()) {
printf("Deque is Empty!\n");
return;
}
printf("Deque elements: ");
int i = f;
while (1) {
printf("%d ", deque[i]);
if (i == r) break;
i = (i + 1) % SIZE;
}
printf("\n");
}
int main() {
insertRear(10);
insertRear(20);
insertRear(30);
display();
insertFront(5);
insertFront(1);
display();
deleteFront();
display();
return 0;
}
OUTPUT
#include <stdio.h>
#define SIZE 10
int arr[SIZE];
int top1 = -1; //stack1 top=-1
int top2 = SIZE; //stack2 top=size of entire array
void displayS1() {
printf("Stack 1: ");
for (int i = 0; i <= top1; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
//stack2 operations
void push2(int value) {
if (top1 + 1 == top2) {
printf("Stack Overflow! Cannot push %d in Stack 2\n", value);
return;
}
arr[--top2] = value;
printf("Pushed %d into Stack 2\n", value);
}
int pop2() {
if (top2 == SIZE) {
printf("Stack 2 Underflow!\n");
return -1;
}
return arr[top2++];
}
void displayS2() {
printf("Stack 2: ");
for (int i = SIZE - 1; i >= top2; i--) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
push1(10);
push1(20);
push1(30);
push2(100);
push2(90);
push2(80);
displayS1();
displayS2();
displayS1();
displayS2();
return 0;
}
OUTPUT
#include <stdio.h>
#define SIZE 5
int Dequeue[SIZE];
int f = -1, r = -1;
int isFull() {
return (f == 0 && r == SIZE - 1) || (f == r + 1);
int isEmpty() {
return (f == -1);
}
void insertFront(int value) {
if (isFull()) {
printf("Dequeue is Full!\n");
return;
}
if (isEmpty()) {
f = r = 0;
} else if (f == 0) {
f = SIZE - 1;
} else {
f--;
}
Dequeue[f] = value;
printf("Inserted %d at front\n", value);
}
insertRear(30);
display();
return 0;
}
OUTPUT
Q11. Singly linked list. operations- create, traverse, insert( front, end, by position, before
and after value ), delete( front, end, by position, by value), search, reverse.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* head = NULL;
void traverse() {
if (head == NULL) {
printf("List is empty\n");
return;
}
struct Node* temp = head;
printf("List: ");
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
void insertFront(int value) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = head;
head = newNode;
printf("%d inserted at front\n", value);}
void insertEnd(int value) {
create(value);
}
void insertAtPos(int value, int pos) {
if (pos <= 0) {
printf("Invalid position\n");
return;
}
if (temp == NULL) {
printf("Position out of range\n");
free(newNode);
return;
}
newNode->next = temp->next;
temp->next = newNode;
printf("%d inserted at position %d\n", value, pos);
}
if (head->data == target) {
newNode->next = head;
head = newNode;
printf("%d inserted before %d\n", value, target);
return;
}
struct Node* temp = head;
while (temp->next != NULL && temp->next->data != target)
temp = temp->next;
if (temp->next == NULL) {
printf("Target %d not found\n", target);
free(newNode);
return;
}
newNode->next = temp->next;
temp->next = newNode;
printf("%d inserted before %d\n", value, target);
}
if (temp == NULL) {
printf("Target %d not found\n", target);
return;
}
void deletend() {
if (head == NULL) {
printf("List is empty\n");
return;
}
if (head->next == NULL) {
printf("Deleted %d from end\n", head->data);
free(head);
head = NULL;
return;
}
struct Node* temp = head;
while (temp->next->next != NULL)
temp = temp->next;
if (head->data == value) {
deletebeg();
return;
}
struct Node* temp = head;
while (temp->next != NULL && temp->next->data != value)
temp = temp->next;
if (temp->next == NULL) {
printf("Value %d not found\n", value);
return;
}
struct Node* del = temp->next;
temp->next = del->next;
printf("Deleted node with value %d\n", value);
free(del);
}
void search(int value) {
int pos = 1;
struct Node* temp = head;
while (temp != NULL) {
if (temp->data == value) {
printf("Value %d found at position %d\n", value, pos);
return;
}
temp = temp->next;
pos++;
}
printf("Value %d not found\n", value);
}
void reverse() {
struct Node* prev = NULL;
struct Node* curr = head;
struct Node* next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
int main() {
create(5);
create(10);
traverse();
insertEnd(20);
insertAtPos(25, 3);
insertAfter(25, 30);
traverse();
deletebeg();
reverse();
traverse();
return 0;
}
OUTPUT
struct Node {
int data;
struct Node* next;
};
void createHeader() {
header = (struct Node*)malloc(sizeof(struct Node));
if (header == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
header->data = -1;
header->next = header;
}
void insertEnd(int value) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = header;
if (temp == header) {
printf("List is empty.\n");
return;
}
int main() {
createHeader();
insertEnd(10);
insertEnd(20);
insertEnd(30);
insertEnd(40);
insertEnd(50);
insertEnd(60);
deleteNode(30);
deleteNode(50);
return 0;
}
OUTPUT
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* top = NULL;
int main() {
int choice, val;
while (1) {
printf("\n--- Operations on a Stack ---\n");
printf("1. Push\n2. Pop\n3. Peek\n4.Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter value to push: "); scanf("%d", &val);
push(val);
break;
case 2:
pop();
break;
case 3:
val = peek();
if (val != -1) {
printf("Top element: %d\n", val);}
break;
case 4:
return 0;
default:
printf("Invalid choice!\n");}
}return 0;}
OUTPUT
Q14. Dynamic queue with sentinel nodes - header node and trailer node.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
void createSentinels() {
header = (struct Node*)malloc(sizeof(struct Node));
trailer = (struct Node*)malloc(sizeof(struct Node));
if (header == NULL || trailer == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
header->next = trailer;
trailer->next = NULL;
}
if (temp == trailer) {
printf("Queue is empty.\n");
return;
}
printf("Queue elements: ");
while (temp != trailer) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
createSentinels();
enqueue(10);
enqueue(20);
enqueue(30);
enqueue(40);
enqueue(50);
enqueue(60);
printf("Queue before dequeue:\n");
displayQueue();
dequeue();
dequeue();
printf("Queue after dequeue:\n");
displayQueue();
return 0;
}
OUTPUT
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* front = NULL;
struct Node* rear = NULL;
if (front == NULL) {
front = rear = newNode;
rear->next = front;
} else {
rear->next = newNode;
rear = newNode;
rear->next = front;
}
}
void dequeue() {
if (front == NULL) {
printf("Queue is empty. Cannot dequeue.\n");
return;
}
int value;
if (front == rear) {
value = front->data;
free(front);
front = rear = NULL;
} else {
struct Node* temp = front;
value = temp->data;
front = front->next;
rear->next = front;
free(temp);
}
enqueue(10);
enqueue(20);
enqueue(30);
enqueue(40);
enqueue(50);
enqueue(60);
return 0;
}
OUTPUT
Q16. Doubly linked list - operations: create, traverse, insert and delete.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* prev;
struct Node* next;
};
if (head == NULL) {
head = tail = newNode;
} else {
tail->next = newNode;
newNode->prev = tail;
tail = newNode;
}
}
void traverseList() {
if (head == NULL) {
printf("List is empty.\n");
return;
}
if (position == 1) {
newNode->next = head;
if (head != NULL)
head->prev = newNode;
head = newNode;
if (tail == NULL)
tail = newNode;
return;
}
if (temp == NULL) {
printf("Position out of bounds.\n");
free(newNode);
return;
}
newNode->next = temp->next;
newNode->prev = temp;
if (temp->next != NULL)
temp->next->prev = newNode;
else
tail = newNode;
temp->next = newNode;
}
void deleteAtPosition(int position) {
if (head == NULL) {
printf("List is empty. Cannot delete.\n");
return;
}
if (position == 1) {
head = head->next;
if (head != NULL)
head->prev = NULL;
else
tail = NULL;
printf("Deleted value: %d\n", temp->data);
free(temp);
return;
}
int i = 1;
while (temp != NULL && i < position) {
temp = temp->next;
i++;
}
if (temp == NULL) {
printf("Position out of bounds.\n");
return;
}
if (temp->prev != NULL)
temp->prev->next = temp->next;
if (temp->next != NULL)
temp->next->prev = temp->prev;
else
tail = temp->prev;
printf("Initial list:\n");
traverseList();
return 0;
}
OUTPUT
#include <stdio.h>
#include <stdlib.h>
struct Term {
int coeff;
int exp;
struct Term* next;
};
int main() {
struct Term* poly1 = NULL;
struct Term* poly2 = NULL;
insert(&poly1, 3, 2);
insert(&poly1, 5, 1);
insert(&poly1, 6, 0);
insert(&poly2, 6, 1);
insert(&poly2, 8, 0);
printf("Poly 1: ");
display(poly1);
printf("Poly 2: ");
display(poly2);
return 0;
}
OUTPUT
int main() {
char num1[21], num2[21], result[22];
int i, j, k = 0, carry = 0;
i = len1 - 1;
j = len2 - 1;
result[k] = '\0';
printf("Sum: ");
for (int l = k - 1; l >= 0; l--)
printf("%c", result[l]);
printf("\n");
return 0;
}
OUTPUT
Q19. Binary search tree- operations: insert, traverse recursive, traverse iterative, search
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
int main() {
struct Node* root = NULL;
root = insert(root, 50);
insert(root, 30);
insert(root, 70);
insert(root, 20);
insert(root, 40);
insert(root, 60);
insert(root, 80);
return 0;
}
OUTPUT
#include <stdio.h>
int main() {
int arr[100], n;
quickSort(arr, 0, n - 1);
return 0;
}
OUTPUT
Q21. Merge sort
#include <stdio.h>
int main() {
int arr[100], n;
mergeSort(arr, 0, n - 1);
return 0;
}
OUTPUT
#include <stdio.h>
if (largest != i) {
swap(&arr[i], &arr[largest]);
heapify(arr, n, largest);
}
}
int main() {
int arr[100], n;
heapSort(arr, n);
return 0;
}
OUTPUT
Q23. BFS
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct Queue {
int items[MAX];
int front;
int rear;
};
struct Graph {
int adjMatrix[MAX][MAX];
int numVertices;
};
visited[startVertex] = true;
enqueue(&q, startVertex);
printf("BFS starting from vertex %d: ", startVertex);
while (!isQueueEmpty(&q)) {
int currentVertex = dequeue(&q);
printf("%d ", currentVertex);
int main() {
struct Graph g;
int numVertices, numEdges, startVertex, start, end;
bfs(&g, startVertex);
return 0;
}
OUTPUT
Q24. DFS
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct Graph {
int adjMatrix[MAX][MAX];
int numVertices;
};
int main() {
struct Graph g;
int numVertices, numEdges, startVertex, start, end;
printf("\n");
return 0;
}
OUTPUT
Q25. Prim’s
#include <stdio.h>
#include <limits.h>
int adjMatrix[MAX][MAX];
int parent[MAX];
int key[MAX];
int mstSet[MAX];
key[0] = 0;
parent[0] = -1;
mstSet[u] = 1;
printf("Edge \tWeight\n");
for (int i = 1; i < numVertices; i++) {
printf("%d - %d \t%d\n", parent[i], i, adjMatrix[i][parent[i]]);
}
}
int main() {
int numVertices, numEdges, start, end, weight;
primMST(numVertices);
return 0;
}
OUTPUT
Q26. Kruskal's
#include <stdio.h>
#include <stdlib.h>
struct Edge {
int start, end, weight;
};
struct Graph {
int numVertices, numEdges;
struct Edge edges[MAX];
};
int parent[MAX];
int find(int i) {
if (parent[i] == i)
return i;
return find(parent[i]);
}
int mstWeight = 0;
printf("Edge \tWeight\n");
if (u != v) {
unionSets(u, v);
printf("%d - %d \t%d\n", g->edges[i].start, g->edges[i].end, g->edges[i].weight);
mstWeight += g->edges[i].weight;
}
}
int main() {
struct Graph g;
kruskal(&g);
return 0;
}
OUTPUT
#include <stdio.h>
#include <limits.h>
#define MAX 10
int graph[MAX][MAX];
int dist[MAX];
int visited[MAX];
dist[start] = 0;
visited[u] = 1;
int main() {
int n, edges, u, v, w, start;
dijkstra(n, start);
return 0;
}
OUTPUT