Dsa Imp Ques
Dsa Imp Ques
OF TECHNOLOGY
#include <stdlib.h>
int sum = 0;
sum += arr[i];
}
return (float)sum / size;
if (size % 2 != 0) {
int main() {
int size;
scanf("%d", &size);
int arr[size];
scanf("%d", &arr[i]);
return 0;
printf("Array: ");
printf("\n");
return;
arr[position] = element;
(*size)++;
printf("Invalid position\n");
return;
(*size)--;
int main() {
int size;
scanf("%d", &size);
int arr[size];
scanf("%d", &arr[i]);
displayArray(arr, size);
printf("Choose an option:\n");
printf("Option: ");
scanf("%d", &option);
switch (option) {
case 1:
scanf("%d", &position);
scanf("%d", &element);
break;
case 2:
scanf("%d", &position);
break;
default:
printf("Invalid option\n");
break;
displayArray(arr, size);
return 0;
if (arr[i] == number) {
return i;
return -1;
int main() {
int size;
printf("Enter the size of the array: ");
scanf("%d", &size);
int arr[size];
scanf("%d", &arr[i]);
int number;
scanf("%d", &number);
if (index != -1) {
} else {
return 0;
*a = *b;
*b = temp;
}
}
printf("\n");
int main() {
int size;
scanf("%d", &size);
int arr[size];
scanf("%d", &arr[i]);
bubbleSort(arr, size);
displayArray(arr, size);
return 0;
#include <stdlib.h>
struct Node {
int data;
};
head = head->next;
printf("\n");
newNode->data = element;
newNode->next = head;
head = newNode;
return head;
head = current->next;
free(current);
return head;
prev = current;
current = current->next;
if (current != NULL) {
prev->next = current->next;
free(current);
printf("Element %d deleted from the linked list\n", element);
} else {
return head;
int main() {
displayList(head);
printf("Choose an option:\n");
printf("Option: ");
scanf("%d", &option);
switch (option) {
case 1:
scanf("%d", &element);
break;
case 2:
scanf("%d", &element);
break;
default:
printf("Invalid option\n");
break;
displayList(head);
return 0;
}
Q-9) Write a program to print the elements of a linked list in reverse
order without disturbing the linked list.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertNode(struct Node** head, int data) {
struct Node* newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
void printReverse(struct Node* head) {
if (head == NULL) {
return;
}
printReverse(head->next);
printf("%d ", head->data);
}
void displayList(struct Node* head) {
printf("Linked List: ");
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
struct Node* head = NULL;
int n, data;
printf("Enter the number of elements: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("Enter element %d: ", i + 1);
scanf("%d", &data);
insertNode(&head, data);
}
displayList(head);
printf("Reversed Linked List: ");
printReverse(head);
printf("\n");
return 0;
}
#include <stdlib.h>
struct Node {
int data;
};
if (newNode == NULL) {
exit(1);
newNode->data = data;
newNode->next = NULL;
return newNode;
newNode->next = *head;
*head = newNode;
next = current->next;
current->next = prev;
prev = current;
current = next;
*head = prev;
printf("\n");
int main() {
int n, data;
scanf("%d", &n);
scanf("%d", &data);
insertNode(&head, data);
printf("Original ");
displayList(head);
reverseList(&head);
printf("Reversed ");
displayList(head);
return 0;
#include <stdlib.h>
struct Term {
int coefficient;
int exponent;
struct Term* next;
};
struct Polynomial {
};
poly->head = NULL;
return poly;
newTerm->coefficient = coefficient;
newTerm->exponent = exponent;
newTerm->next = NULL;
if (poly->head == NULL) {
poly->head = newTerm;
} else {
temp = temp->next;
temp->next = newTerm;
if (term == NULL) {
printf("Polynomial is empty.\n");
return;
if (term->next != NULL) {
printf("+ ");
term = term->next;
}
printf("\n");
term1 = term1->next;
term2 = term2->next;
} else {
if (coefficientSum != 0) {
term1 = term1->next;
term2 = term2->next;
term1 = term1->next;
term2 = term2->next;
return sum;
term = term->next;
free(temp);
}
free(poly);
int main() {
insertTerm(poly1, 3, 2);
insertTerm(poly1, 2, 1);
insertTerm(poly1, 5, 0);
insertTerm(poly2, 4, 3);
insertTerm(poly2, 2, 0);
printf("Polynomial 1: ");
displayPolynomial(poly1);
printf("Polynomial 2: ");
displayPolynomial(poly2);
printf("Sum: ");
displayPolynomial(sum);
freePolynomial(poly1);
freePolynomial(poly2);
freePolynomial(sum);
return 0;
#include <stdlib.h>
struct Node {
int data;
};
struct Node* createNode(int data) {
if (newNode == NULL) {
exit(1);
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
if (*head == NULL) {
*head = newNode;
} else {
newNode->next = *head;
(*head)->prev = newNode;
*head = newNode;
if (*head == NULL) {
*head = newNode;
} else {
temp = temp->next;
temp->next = newNode;
newNode->prev = temp;
}
void displayForward(struct Node* head) {
if (head == NULL) {
return;
head = head->next;
printf("\n");
if (head == NULL) {
return;
head = head->next;
head = head->prev;
printf("\n");
temp = head;
head = head->next;
free(temp);
}
}
int main() {
scanf("%d", &numElements);
scanf("%d", &element);
insertAtEnd(&head, element);
displayForward(head);
displayReverse(head);
freeList(head);
return 0;
#include <stdlib.h>
struct Stack {
int arr[MAX_SIZE];
int top;
};
stack->top = -1;
}
int isFull(struct Stack* stack) {
if (isFull(stack)) {
return;
stack->arr[++stack->top] = element;
if (isEmpty(stack)) {
return -1;
return element;
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1;
return stack->arr[stack->top];
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return;
}
printf("\n");
int main() {
createStack(&stack);
while (1) {
printf("\nStack Operations:\n");
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Peek\n");
printf("4. Display\n");
printf("5. Quit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &element);
push(&stack, element);
break;
case 2:
pop(&stack);
break;
case 3:
element = peek(&stack);
break;
case 4:
display(&stack);
break;
case 5:
return 0;
default:
return 0;
#include <stdlib.h>
struct Node {
int data;
};
if (newNode == NULL) {
exit(1);
newNode->data = data;-
newNode->next = NULL;
return newNode;
}
newNode->next = *top;
*top = newNode;
if (isEmpty(*top)) {
return -1;
*top = (*top)->next;
free(temp);
return data;
if (isEmpty(top)) {
printf("Stack is empty.\n");
return -1;
return top->data;
if (isEmpty(top)) {
printf("Stack is empty.\n");
return;
top = top->next;
printf("\n");
temp = top;
top = top->next;
free(temp);
int main() {
while (1) {
printf("\nStack Operations:\n");
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Peek\n");
printf("4. Display\n");
printf("5. Quit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &element);
push(&top, element);
break;
case 2:
pop(&top);
break;
case 3:
element = peek(top);
break;
case 4:
display(top);
break;
case 5:
freeStack(top);
return 0;
default:
}
}
#include <stdlib.h>
typedef struct {
int items[MAX_SIZE];
int front;
int rear;
} Queue;
Queue* createQueue() {
queue->front = -1;
queue->rear = -1;
return queue;
if (isFull(queue)) {
printf("Queue is full\n");
return;
if (isEmpty(queue))
queue->front = 0;
queue->rear++;
queue->items[queue->rear] = item;
if (isEmpty(queue)) {
printf("Queue is empty\n");
return -1;
if (queue->front == queue->rear)
else
queue->front++;
return item;
if (isEmpty(queue)) {
printf("Queue is empty\n");
return;
printf("\n");
}
int main() {
do {
printf("\nQueue Operations\n");
printf("1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Display\n");
printf("4. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &item);
enqueue(queue, item);
break;
case 2:
item = dequeue(queue);
if (item != -1)
break;
case 3:
display(queue);
break;
case 4:
printf("Exiting...\n");
break;
default:
return 0;
}
Q-16) Write a program to implement a queue using a linked-list.
#include <stdio.h>
#include <stdlib.h>
int data;
} Node;
typedef struct {
Node* front;
Node* rear;
} Queue;
Queue* createQueue() {
return queue;
}
int isEmpty(Queue* queue) {
newNode->data = item;
newNode->next = NULL;
if (isEmpty(queue)) {
} else {
queue->rear->next = newNode;
queue->rear = newNode;
if (isEmpty(queue)) {
printf("Queue is empty\n");
return -1;
queue->front = frontNode->next;
if (queue->front == NULL)
queue->rear = NULL;
free(frontNode);
return item;
if (isEmpty(queue)) {
printf("Queue is empty\n");
return;
printf("\n");
int main() {
do {
printf("\nQueue Operations\n");
printf("1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Display\n");
printf("4. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &item);
enqueue(queue, item);
break;
case 2:
item = dequeue(queue);
if (item != -1)
break;
case 3:
display(queue);
break;
case 4:
printf("Exiting...\n");
break;
default:
#include <stdlib.h>
#define MAX_SIZE 5
typedef struct {
int items[MAX_SIZE];
int front;
int rear;
} CircularQueue;
CircularQueue* createCircularQueue() {
queue->front = -1;
queue->rear = -1;
return queue;
}
int isEmpty(CircularQueue* queue) {
if (isFull(queue)) {
return;
if (isEmpty(queue))
queue->front = 0;
queue->items[queue->rear] = item;
if (isEmpty(queue)) {
return -1;
if (queue->front == queue->rear)
else
return item;
if (isEmpty(queue)) {
return;
int i = queue->front;
i++;
} else {
i = 0;
i++;
printf("\n");
int main() {
do {
printf("1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Display\n");
printf("4. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &item);
enqueue(queue, item);
break;
case 2:
item = dequeue(queue);
if (item != -1)
break;
case 3:
display(queue);
break;
case 4:
printf("Exiting...\n");
break;
default:
return 0;
#include <stdlib.h>
int data;
int priority;
} Node;
typedef struct {
Node* front;
} PriorityQueue;
PriorityQueue* createPriorityQueue() {
queue->front = NULL;
return queue;
newNode->data = item;
newNode->priority = priority;
newNode->next = NULL;
newNode->next = queue->front;
queue->front = newNode;
} else {
current = current->next;
newNode->next = current->next;
current->next = newNode;
if (isEmpty(queue)) {
return -1;
queue->front = frontNode->next;
free(frontNode);
return item;
if (isEmpty(queue)) {
return;
printf("\n");
int main() {
do {
printf("1. Insert\n");
printf("2. Delete\n");
printf("3. Display\n");
printf("4. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &item);
scanf("%d", &priority);
break;
case 2:
item = delete(queue);
if (item != -1)
break;
case 3:
display(queue);
break;
case 4:
printf("Exiting...\n");
break;
default:
#include <stdlib.h>
int data;
} Node;
typedef struct {
Node* front;
Node* rear;
} Deque;
Deque* createDeque() {
return deque;
}
int isEmpty(Deque* deque) {
newNode->data = item;
newNode->prev = NULL;
newNode->next = deque->front;
if (isEmpty(deque))
deque->rear = newNode;
else
deque->front->prev = newNode;
deque->front = newNode;
newNode->data = item;
newNode->prev = deque->rear;
newNode->next = NULL;
if (isEmpty(deque))
deque->front = newNode;
else
deque->rear->next = newNode;
deque->rear = newNode;
if (isEmpty(deque)) {
return -1;
deque->front = frontNode->next;
if (deque->front == NULL)
deque->rear = NULL;
else
deque->front->prev = NULL;
free(frontNode);
return item;
if (isEmpty(deque)) {
return -1;
deque->rear = rearNode->prev;
if (deque->rear == NULL)
deque->front = NULL;
else
deque->rear->next = NULL;
free(rearNode);
return item;
if (isEmpty(deque)) {
return;
current = current->next;
printf("\n");
int main() {
do {
printf("\nDouble-Ended Queue Operations\n");
printf("5. Display\n");
printf("6. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &item);
insertFront(deque, item);
break;
case 2:
scanf("%d", &item);
insertRear(deque, item);
break;
case 3:
item = deleteFront(deque);
if (item != -1)
break;
case 4:
item = deleteRear(deque);
if (item != -1)
break;
case 5:
display(deque);
break;
case 6:
printf("Exiting...\n");
break;
default:
return 0;
#include <stdlib.h>
int vertex;
} Node;
typedef struct {
int numVertices;
Node** adjacencyList;
} Graph;
graph->numVertices = numVertices;
graph->adjacencyList[i] = NULL;
return graph;
newNode->vertex = dest;
newNode->next = graph->adjacencyList[src];
graph->adjacencyList[src] = newNode;
newNode = (Node*)malloc(sizeof(Node));
newNode->vertex = src;
newNode->next = graph->adjacencyList[dest];
graph->adjacencyList[dest] = newNode;
while (current) {
current = current->next;
printf("NULL\n");
int main() {
scanf("%d", &numVertices);
scanf("%d", &numEdges);
printGraph(graph);
return 0;
}
Q-21) Write a program for the insertion sort.
#include <stdio.h>
int i, key, j;
key = arr[i];
j = i - 1;
arr[j + 1] = arr[j];
j = j - 1;
arr[j + 1] = key;
int i;
printf("\n");
int main() {
int n;
scanf("%d", &n);
int arr[n];
scanf("%d", &arr[i]);
printArray(arr, n);
insertionSort(arr, n);
printArray(arr, n);
return 0;
int i, j, min_idx;
min_idx = i;
min_idx = j;
arr[i] = arr[min_idx];
arr[min_idx] = temp;
int i;
printf("\n");
int main() {
int n;
scanf("%d", &n);
int arr[n];
scanf("%d", &arr[i]);
printArray(arr, n);
selectionSort(arr, n);
return 0;
int i, j;
arr[j + 1] = temp;
int i;
printf("\n");
int main() {
int n;
scanf("%d", &n);
int arr[n];
scanf("%d", &arr[i]);
printArray(arr, n);
bubbleSort(arr, n);
printf("Sorted array: ");
printArray(arr, n);
return 0;
*a = *b;
*b = temp;
i++;
swap(&arr[i], &arr[j]);
return (i + 1);
printf("\n");
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
scanf("%d", &arr[i]);
printArray(arr, n);
quickSort(arr, 0, n - 1);
printArray(arr, n);
return 0;