DSA Experiment Solution-1
DSA Experiment Solution-1
#include <stdio.h>
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("Sorted array: ");
printArray(arr, n);
return 0;
2 Write a Program for Insertion Sort.
#include <stdio.h>
int main() {
int arr[] = {12, 11, 13, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
printf("Sorted array: ");
printArray(arr, n);
return 0;
}
3 Write a Program for Selection Sort.
#include <stdio.h>
int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr) / sizeof(arr[0]);
selectionSort(arr, n);
printf("Sorted array: ");
printArray(arr, n);
return 0;
}
4 Write a Program for Merge Sort.
#include <stdio.h>
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
arr[k++] = (L[i] <= R[j]) ? L[i++] : R[j++];
}
while (i < n1) arr[k++] = L[i++];
while (j < n2) arr[k++] = R[j++];
}
int main() {
int arr[] = {38, 27, 43, 3, 9, 82, 10};
int n = sizeof(arr) / sizeof(arr[0]);
mergeSort(arr, 0, n - 1);
printf("Sorted array: ");
printArray(arr, n);
return 0;
}
#include <stdio.h>
i++;
swap(&arr[i], &arr[j]);
}
swap(&arr[i + 1], &arr[high]);
return i + 1;
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printf("Sorted array: ");
printArray(arr, n);
return 0;
}
#include <stdio.h>
int linearSearch(int arr[], int n, int key) {
for (int i = 0; i < n; i++) {
if (arr[i] == key)
return i;
}
return -1;
}
int main() {
int arr[] = {10, 20, 30, 40, 50};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 30;
int result = linearSearch(arr, n, key);
if (result != -1)
printf("Element found at index %d\n", result);
else
printf("Element not found\n");
return 0;
}
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 40;
int result = binarySearch(arr, n, key);
if (result != -1)
printf("Element found at index %d\n", result);
else
printf("Element not found\n");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
if (pos == 1) {
new_node->next = head;
head = new_node;
return;
}
if (temp == NULL) {
printf("Position out of range\n");
free(new_node);
return;
}
new_node->next = temp->next;
temp->next = new_node;
}
if (pos == 1) {
struct Node* temp = head;
head = head->next;
free(temp);
return;
}
int main() {
insertAtEnd(10);
insertAtEnd(20);
insertAtEnd(30);
printf("After inserting 10, 20, 30 at the end:\n");
traverse();
insertAtBeginning(5);
printf("After inserting 5 at the beginning:\n");
traverse();
insertAtPosition(25, 3);
printf("After inserting 25 at position 3:\n");
traverse();
deleteAtBeginning();
printf("After deleting at the beginning:\n");
traverse();
deleteAtEnd();
printf("After deleting at the end:\n");
traverse();
deleteAtPosition(2);
printf("After deleting at position 2:\n");
traverse();
return 0;
}
##include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* prev;
struct Node* next;
};
void traverse() {
struct Node* temp = head;
while (temp) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
void insert_begin(int val) {
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = val;
new_node->prev = NULL;
new_node->next = head;
if (head) head->prev = new_node;
head = new_node;
}
void delete_begin() {
if (!head) return;
struct Node* temp = head;
head = head->next;
if (head) head->prev = NULL;
free(temp);
}
void delete_end() {
if (!head) return;
struct Node* temp = head;
if (!temp->next) {
free(head);
head = NULL;
return;
}
while (temp->next) temp = temp->next;
temp->prev->next = NULL;
free(temp);
}
int main() {
insert_begin(1);
insert_end(2);
insert_end(3);
insert_at(1, 4);
traverse();
delete_begin();
traverse();
delete_end();
traverse();
delete_at(1);
traverse();
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
void traverse() {
if (!head) return;
struct Node* temp = head;
do {
printf("%d ", temp->data);
temp = temp->next;
} while (temp != head);
printf("\n");
}
void delete_begin() {
if (!head) return;
if (head->next == head) {
free(head);
head = NULL;
return;
}
struct Node* temp = head;
while (temp->next != head) temp = temp->next;
struct Node* to_delete = head;
temp->next = head->next;
head = head->next;
free(to_delete);
}
void delete_end() {
if (!head) return;
if (head->next == head) {
free(head);
head = NULL;
return;
}
struct Node* temp = head;
while (temp->next->next != head) temp = temp->next;
struct Node* to_delete = temp->next;
temp->next = head;
free(to_delete);
}
void delete_at(int pos) {
if (pos == 0) {
delete_begin();
return;
}
struct Node* temp = head;
for (int i = 0; i < pos - 1 && temp->next != head; ++i) temp = temp->next;
if (temp->next == head) return;
struct Node* to_delete = temp->next;
temp->next = to_delete->next;
free(to_delete);
}
int main() {
insert_begin(1);
insert_end(2);
insert_end(3);
insert_at(1, 4);
traverse();
delete_begin();
traverse();
delete_end();
traverse();
delete_at(1);
traverse();
return 0;
}
1. Stack as an Array
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
void pop() {
if (top == -1) return; // Stack underflow
top--;
}
void traverse_array() {
for (int i = 0; i <= top; i++)
printf("%d ", stack[i]);
printf("\n");
}
int main() {
push(1);
push(2);
push(3);
traverse_array();
pop();
traverse_array();
return 0;
}
2. As Linked List
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
void pop() {
if (!top) return;
struct Node* temp = top;
top = top->next;
free(temp);
}
void traverse_list() {
struct Node* temp = top;
while (temp) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
push(1);
push(2);
push(3);
traverse_list();
pop();
traverse_list();
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
void dequeue() {
if (front == -1) return; // Queue underflow
if (front == rear) front = rear = -1; // Reset queue
else front = (front + 1) % MAX;
}
void traverse_array() {
if (front == -1) return; // Queue is empty
int i = front;
while (1) {
printf("%d ", queue[i]);
if (i == rear) break;
i = (i + 1) % MAX;
}
printf("\n");
}
int main() {
enqueue(1);
enqueue(2);
enqueue(3);
traverse_array();
dequeue();
traverse_array();
return 0;
}
struct Node {
int data;
struct Node* next;
};
void dequeue() {
if (!front) return; // Queue underflow
struct Node* temp = front;
front = front->next;
if (!front) rear = NULL; // Reset rear if queue is empty
free(temp);
}
void traverse_list() {
struct Node* temp = front;
while (temp) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
enqueue(1);
enqueue(2);
enqueue(3);
traverse_list();
dequeue();
traverse_list();
return 0;
}
13 Represent a 2-variable polynomial using
array.Use this representation to implement
addition
of polynomials.
#include <stdio.h>
#include <stdlib.h>
int main() {
struct Polynomial p1, p2, result;
// Initialize polynomials
init_polynomial(&p1);
init_polynomial(&p2);
init_polynomial(&result);
printf("Enter coefficients for Polynomial P1:\n");
read_polynomial(&p1);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define MAX_NON_ZERO 100 // Maximum number of non-zero elements
struct SparseMatrix {
int row[MAX_NON_ZERO]; // Row indices of non-zero elements
int col[MAX_NON_ZERO]; // Column indices of non-zero elements
int val[MAX_NON_ZERO]; // Values of non-zero elements
int size; // Number of non-zero elements
};
int main() {
struct SparseMatrix sm1, sm2, result;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
// Structure for a node in the binary search tree
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// Traversals
printf("Inorder traversal: ");
inorder_traversal(root);
printf("\n");
// Deleting a node
printf("Deleting 20\n");
root = delete_node(root, 20);
printf("Inorder traversal after deleting 20: ");
inorder_traversal(root);
printf("\n");
printf("Deleting 30\n");
root = delete_node(root, 30);
printf("Inorder traversal after deleting 30: ");
inorder_traversal(root);
printf("\n");
printf("Deleting 50\n");
root = delete_node(root, 50);
printf("Inorder traversal after deleting 50: ");
inorder_traversal(root);
printf("\n");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, graph[MAX][MAX], visited[MAX] = {0};
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct Node {
int vertex;
struct Node* next;
};
int main() {
int n, visited[MAX] = {0};
struct Node* adjList[MAX] = {NULL};
newNode = createNode(u);
newNode->next = adjList[v];
adjList[v] = newNode; // For undirected graph
}
return 0;
}
pankaj