0% found this document useful (0 votes)
5 views56 pages

Document

The document contains multiple C programming tasks, including copying arrays, implementing binary search trees, searching and replacing elements in arrays, reversing queues, and working with linked lists. Each task is accompanied by code snippets that demonstrate the required functionality, such as counting nodes in a binary search tree and sorting arrays using selection sort. Additionally, it notes that some questions are repeated throughout the document.

Uploaded by

termux6132
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views56 pages

Document

The document contains multiple C programming tasks, including copying arrays, implementing binary search trees, searching and replacing elements in arrays, reversing queues, and working with linked lists. Each task is accompanied by code snippets that demonstrate the required functionality, such as counting nodes in a binary search tree and sorting arrays using selection sort. Additionally, it notes that some questions are repeated throughout the document.

Uploaded by

termux6132
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

### Q1. A) Write a C program to copy one array into another array.

```c

#include <stdio.h>

Void copyArray(int source[], int dest[], int n) {

For (int I = 0; I < n; i++) {

Dest[i] = source[i];

Int main() {

Int n;

Printf(“Enter size of array: “);

Scanf(“%d”, &n);

Int source[n], dest[n];

Printf(“Enter %d elements for source array: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &source[i]);

copyArray(source, dest, n);

printf(“Destination array: “);

for (int I = 0; I < n; i++) {

printf(“%d “, dest[i]);

}
Printf(“\n”);

Return 0;

```

### Q1. B) Write a C Program to implement the following functions on Binary Search Tree:
To count leaf nodes, To count total number of nodes.

```c

#include <stdio.h>

#include <stdlib.h>

Struct Node {

Int data;

Struct Node *left, *right;

};

Struct Node* createNode(int data) {

Struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = data;

newNode->left = newNode->right = NULL;

return newNode;

Struct Node* insert(struct Node* root, int data) {

If (root == NULL) return createNode(data);

If (data < root->data)

Root->left = insert(root->left, data);


Else if (data > root->data)

Root->right = insert(root->right, data);

Return root;

Int countLeafNodes(struct Node* root) {

If (root == NULL) return 0;

If (root->left == NULL && root->right == NULL) return 1;

Return countLeafNodes(root->left) + countLeafNodes(root->right);

Int countTotalNodes(struct Node* root) {

If (root == NULL) return 0;

Return 1 + countTotalNodes(root->left) + countTotalNodes(root->right);

Int main() {

Struct Node* root = NULL;

Int n, data;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

Root = insert(root, data);

Printf(“Number of leaf nodes: %d\n”, countLeafNodes(root));

Printf(“Total number of nodes: %d\n”, countTotalNodes(root));

Return 0;
}

```

*Note*: This solution is repeated in later questions (e.g., Q1. B later). Refer here for
duplicates.

### Q1. A) Write a ‘C’ program to accept n elements, store them in an array, and find and
replace a given number.

```c

#include <stdio.h>

Int main() {

Int n, find, replace;

Printf(“Enter size of array: “);

Scanf(“%d”, &n);

Int arr[n];

Printf(“Enter %d elements: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &arr[i]);

Printf(“Enter number to find: “);

Scanf(“%d”, &find);

Printf(“Enter number to replace with: “);

Scanf(“%d”, &replace);

Int found = 0;
For (int I = 0; I < n; i++) {

If (arr[i] == find) {

Arr[i] = replace;

Found = 1;

If (found) {

Printf(“Array after replacement: “);

For (int I = 0; I < n; i++) {

Printf(“%d “, arr[i]);

Printf(“\n”);

} else {

Printf(“Number %d not found in array.\n”, find);

Return 0;

```

*Note*: This question is repeated multiple times. Refer here for duplicates.

### Q1. B) Write a program to reverse the elements of a queue (Use Static implementation
of Queue).

```c
#include <stdio.h>

#define MAX 100

Struct Queue {

Int arr[MAX];

Int front, rear;

};

Void initQueue(struct Queue* q) {

q->front = q->rear = -1;

Void enqueue(struct Queue* q, int data) {

If (q->rear == MAX – 1) {

Printf(“Queue is full!\n”);

Return;

If (q->front == -1) q->front = 0;

q->arr[++q->rear] = data;

Int dequeue(struct Queue* q) {

If (q->front == -1 || q->front > q->rear) {

Printf(“Queue is empty!\n”);

Return -1;

Return q->arr[q->front++];

Void reverseQueue(struct Queue* q) {

If (q->front == -1 || q->front > q->rear) return;


Int temp[MAX], I = 0;

While (q->front <= q->rear) {

Temp[i++] = dequeue(q);

For (int j = I – 1; j >= 0; j--) {

Enqueue(q, temp[j]);

Void displayQueue(struct Queue* q) {

If (q->front == -1 || q->front > q->rear) {

Printf(“Queue is empty!\n”);

Return;

For (int I = q->front; I <= q->rear; i++) {

Printf(“%d “, q->arr[i]);

Printf(“\n”);

Int main() {

Struct Queue q;

initQueue(&q);

int n, data;

printf(“Enter number of elements: “);

scanf(“%d”, &n);

printf(“Enter %d elements: “, n);

for (int I = 0; I < n; i++) {


scanf(“%d”, &data);

enqueue(&q, data);

Printf(“Original queue: “);

displayQueue(&q);

reverseQueue(&q);

printf(“Reversed queue: “);

displayQueue(&q);

return 0;

```

*Note*: This question is repeated. Refer here for duplicates.

### Q1. A) Write a C program to accept n elements, store in an array, and use linear search
to check if a value is present.

```c

#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 n, key;

Printf(“Enter size of array: “);

Scanf(“%d”, &n);

Int arr[n];

Printf(“Enter %d elements: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &arr[i]);

Printf(“Enter value to search: “);

Scanf(“%d”, &key);

Int result = linearSearch(arr, n, key);

If (result != -1) {

Printf(“Value %d found at index %d.\n”, key, result);

} else {

Printf(“Value %d not found in array.\n”, key);

Return 0;

```

### Q1. B) Write a C Program to print alternate nodes in a linked list using recursion.

```c

#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));

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 printAlternateNodes(struct Node* head, int isAlternate) {

If (head == NULL) return;

If (isAlternate) {

Printf(“%d “, head->data);

printAlternateNodes(head->next, !isAlternate);

Int main() {

Struct Node* head = NULL;

Int n, data;
Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

insertNode(&head, data);

Printf(“Alternate nodes: “);

printAlternateNodes(head, 1);

printf(“\n”);

return 0;

```

### Q1. A) Write a C program to accept city names, store in an array, and use linear search
to check if a city is present.

```c

#include <stdio.h>

#include <string.h>

#define MAX 100

Int linearSearchCity(char cities[][MAX], int n, char key[]) {

For (int I = 0; I < n; i++) {

If (strcmp(cities[i], key) == 0) return I;

}
Return -1;

Int main() {

Int n;

Char cities[MAX][MAX], key[MAX];

Printf(“Enter number of cities: “);

Scanf(“%d”, &n);

Getchar(); // Clear newline

Printf(“Enter %d city names:\n”, n);

For (int I = 0; I < n; i++) {

Fgets(cities[i], MAX, stdin);

Cities[i][strcspn(cities[i], “\n”)] = 0; // Remove newline

Printf(“Enter city to search: “);

Fgets(key, MAX, stdin);

Key[strcspn(key, “\n”)] = 0; // Remove newline

Int result = linearSearchCity(cities, n, key);

If (result != -1) {

Printf(“City %s found at index %d.\n”, key, result);

} else {

Printf(“City %s not found in array.\n”, key);

Return 0;

```
### Q1. B) Write a C program to implement a singly linked list with Create and Display
operations.

```c

#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));

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 displayList(struct Node* head) {

Struct Node* temp = head;

If (temp == NULL) {

Printf(“List is empty!\n”);
Return;

While (temp != NULL) {

Printf(“%d “, temp->data);

Temp = temp->next;

Printf(“\n”);

Int main() {

Struct Node* head = NULL;

Int n, data;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

insertNode(&head, data);

Printf(“Singly Linked List: “);

displayList(head);

return 0;

```

*Note*: This question is repeated. Refer here for duplicates.


### Q1. A) Write a C program to implement a doubly linked list with Create and Display
operations.

```c

#include <stdio.h>

#include <stdlib.h>

Struct Node {

Int data;

Struct Node *prev, *next;

};

Struct Node* createNode(int data) {

Struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = data;

newNode->prev = newNode->next = NULL;

return newNode;

Void insertNode(struct Node** head, int data) {

Struct Node* newNode = createNode(data);

If (*head == NULL) {

*head = newNode;

Return;

newNode->next = *head;

(*head)->prev = newNode;

*head = newNode;
}

Void displayList(struct Node* head) {

Struct Node* temp = head;

If (temp == NULL) {

Printf(“List is empty!\n”);

Return;

While (temp != NULL) {

Printf(“%d “, temp->data);

Temp = temp->next;

Printf(“\n”);

Int main() {

Struct Node* head = NULL;

Int n, data;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

insertNode(&head, data);

Printf(“Doubly Linked List: “);

displayList(head);

return 0;
}

```

### Q1. B) Write a C program to sort n elements in ascending order using Selection Sort.

```c

#include <stdio.h>

Void selectionSort(int arr[], int n) {

For (int I = 0; I < n – 1; i++) {

Int minIdx = I;

For (int j = I + 1; j < n; j++) {

If (arr[j] < arr[minIdx]) {

minIdx = j;

If (minIdx != i) {

Int temp = arr[i];

Arr[i] = arr[minIdx];

Arr[minIdx] = temp;

Int main() {

Int n;

Printf(“Enter size of array: “);


Scanf(“%d”, &n);

Int arr[n];

Printf(“Enter %d elements: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &arr[i]);

selectionSort(arr, n);

printf(“Sorted array: “);

for (int I = 0; I < n; i++) {

printf(“%d “, arr[i]);

Printf(“\n”);

Return 0;

```

### Q1. A) Write a C program to implement a Circular Singly Linked List with Create and
Display operations.

```c

#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));

newNode->data = data;

newNode->next = NULL;

return newNode;

Void insertNode(struct Node** head, int data) {

Struct Node* newNode = createNode(data);

If (*head == NULL) {

*head = newNode;

newNode->next = *head;

return;

Struct Node* temp = *head;

While (temp->next != *head) {

Temp = temp->next;

Temp->next = newNode;

newNode->next = *head;

Void displayList(struct Node* head) {

If (head == NULL) {

Printf(“List is empty!\n”);

Return;

}
Struct Node* temp = head;

Do {

Printf(“%d “, temp->data);

Temp = temp->next;

} while (temp != head);

Printf(“\n”);

Int main() {

Struct Node* head = NULL;

Int n, data;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

insertNode(&head, data);

Printf(“Circular Singly Linked List: “);

displayList(head);

return 0;

```

### Q1. B) Write a C program to implement create and display operations for a binary tree.
```c

#include <stdio.h>

#include <stdlib.h>

Struct Node {

Int data;

Struct Node *left, *right;

};

Struct Node* createNode(int data) {

Struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = data;

newNode->left = newNode->right = NULL;

return newNode;

Struct Node* insert(struct Node* root, int data) {

If (root == NULL) return createNode(data);

If (rand() % 2) { // Randomly insert to left or right for simplicity

Root->left = insert(root->left, data);

} else {

Root->right = insert(root->right, data);

Return root;

Void displayInorder(struct Node* root) {

If (root == NULL) return;

displayInorder(root->left);

printf(“%d “, root->data);
displayInorder(root->right);

Int main() {

Struct Node* root = NULL;

Int n, data;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

Root = insert(root, data);

Printf(“Binary Tree (Inorder): “);

displayInorder(root);

printf(“\n”);

return 0;

```

*Note*: This question is repeated. Refer here for duplicates.

### Q1. A) Write a C program to create a doubly linked list and display nodes with odd
values.

```c
#include <stdio.h>

#include <stdlib.h>

Struct Node {

Int data;

Struct Node *prev, *next;

};

Struct Node* createNode(int data) {

Struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = data;

newNode->prev = newNode->next = NULL;

return newNode;

Void insertNode(struct Node** head, int data) {

Struct Node* newNode = createNode(data);

If (*head == NULL) {

*head = newNode;

Return;

newNode->next = *head;

(*head)->prev = newNode;

*head = newNode;

Void displayOddNodes(struct Node* head) {

Struct Node* temp = head;

If (temp == NULL) {

Printf(“List is empty!\n”);
Return;

Printf(“Nodes with odd values: “);

While (temp != NULL) {

If (temp->data % 2 != 0) {

Printf(“%d “, temp->data);

Temp = temp->next;

Printf(“\n”);

Int main() {

Struct Node* head = NULL;

Int n, data;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

insertNode(&head, data);

displayOddNodes(head);

return 0;

```
### Q1. B) Write a C Program to find the product of all leaf nodes of a binary tree.

```c

#include <stdio.h>

#include <stdlib.h>

Struct Node {

Int data;

Struct Node *left, *right;

};

Struct Node* createNode(int data) {

Struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = data;

newNode->left = newNode->right = NULL;

return newNode;

Struct Node* insert(struct Node* root, int data) {

If (root == NULL) return createNode(data);

If (rand() % 2) {

Root->left = insert(root->left, data);

} else {

Root->right = insert(root->right, data);

Return root;

Int productOfLeafNodes(struct Node* root) {


If (root == NULL) return 1;

If (root->left == NULL && root->right == NULL) return root->data;

Return productOfLeafNodes(root->left) * productOfLeafNodes(root->right);

Int main() {

Struct Node* root = NULL;

Int n, data;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

Root = insert(root, data);

Printf(“Product of leaf nodes: %d\n”, productOfLeafNodes(root));

Return 0;

```

*Note*: This question is repeated. Refer here for duplicates.

### Q1. A) Write a C program to check if a string is a palindrome using a stack (Static
implementation).

```c
#include <stdio.h>

#include <string.h>

#define MAX 100

Struct Stack {

Char arr[MAX];

Int top;

};

Void initStack(struct Stack* s) {

s->top = -1;

Void push(struct Stack* s, char c) {

If (s->top == MAX – 1) {

Printf(“Stack overflow!\n”);

Return;

s->arr[++s->top] = c;

Char pop(struct Stack* s) {

If (s->top == -1) {

Printf(“Stack underflow!\n”);

Return ‘\0’;

Return s->arr[s->top--];

Int isPalindrome(char str[]) {

Struct Stack s;
initStack(&s);

int len = strlen(str);

for (int I = 0; I < len; i++) {

push(&s, str[i]);

For (int I = 0; I < len; i++) {

If (str[i] != pop(&s)) return 0;

Return 1;

Int main() {

Char str[MAX];

Printf(“Enter a string: “);

Scanf(“%s”, str);

If (isPalindrome(str)) {

Printf(“%s is a palindrome.\n”, str);

} else {

Printf(“%s is not a palindrome.\n”, str);

Return 0;

```

### Q1. B) Write a C program to display the total degree of each vertex in a graph.
```c

#include <stdio.h>

#define MAX 100

Void calculateDegree(int graph[][MAX], int n) {

For (int I = 0; I < n; i++) {

Int degree = 0;

For (int j = 0; j < n; j++) {

Degree += graph[i][j]; // For undirected graph, count edges

Printf(“Vertex %d: Total degree = %d\n”, I, degree);

Int main() {

Int n;

Printf(“Enter number of vertices: “);

Scanf(“%d”, &n);

Int graph[MAX][MAX];

Printf(“Enter adjacency matrix (%d x %d):\n”, n, n);

For (int I = 0; I < n; i++) {

For (int j = 0; j < n; j++) {

Scanf(“%d”, &graph[i][j]);

calculateDegree(graph, n);

return 0;

}
```

*Note*: This question is repeated. Refer here for duplicates.

### Q1. A) Write a C program to sort n elements using Bubble Sort and count swaps.

```c

#include <stdio.h>

Void bubbleSort(int arr[], int n, int* swapCount) {

For (int I = 0; I < n – 1; i++) {

For (int j = 0; j < n – I – 1; j++) {

If (arr[j] > arr[j + 1]) {

Int temp = arr[j];

Arr[j] = arr[j + 1];

Arr[j + 1] = temp;

(*swapCount)++;

Int main() {

Int n, swapCount = 0;

Printf(“Enter size of array: “);

Scanf(“%d”, &n);

Int arr[n];
Printf(“Enter %d elements: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &arr[i]);

bubbleSort(arr, n, &swapCount);

printf(“Sorted array: “);

for (int I = 0; I < n; i++) {

printf(“%d “, arr[i]);

Printf(“\nTotal swaps: %d\n”, swapCount);

Return 0;

```

### Q1. B) Write a C Program to implement the following functions on Binary Search Tree:
Insert a new element, Search an element.

```c

#include <stdio.h>

#include <stdlib.h>

Struct Node {

Int data;

Struct Node *left, *right;

};

Struct Node* createNode(int data) {


Struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = data;

newNode->left = newNode->right = NULL;

return newNode;

Struct Node* insert(struct Node* root, int data) {

If (root == NULL) return createNode(data);

If (data < root->data)

Root->left = insert(root->left, data);

Else if (data > root->data)

Root->right = insert(root->right, data);

Return root;

Struct Node* search(struct Node* root, int key) {

If (root == NULL || root->data == key) return root;

If (key < root->data)

Return search(root->left, key);

Return search(root->right, key);

Int main() {

Struct Node* root = NULL;

Int n, data, key;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {


Scanf(“%d”, &data);

Root = insert(root, data);

Printf(“Enter value to search: “);

Scanf(“%d”, &key);

Struct Node* result = search(root, key);

If (result) {

Printf(“Value %d found in the BST.\n”, key);

} else {

Printf(“Value %d not found in the BST.\n”, key);

Return 0;

```

### Q1. A) Write a C program to display in-degree and out-degree of each vertex in a
directed graph.

```c

#include <stdio.h>

#define MAX 100

Void calculateInOutDegree(int graph[][MAX], int n) {

For (int I = 0; I < n; i++) {

Int inDegree = 0, outDegree = 0;

For (int j = 0; j < n; j++) {


inDegree += graph[j][i]; // Edges pointing to vertex i

outDegree += graph[i][j]; // Edges from vertex i

Printf(“Vertex %d: In-degree = %d, Out-degree = %d\n”, I, inDegree, outDegree);

Int main() {

Int n;

Printf(“Enter number of vertices: “);

Scanf(“%d”, &n);

Int graph[MAX][MAX];

Printf(“Enter adjacency matrix (%d x %d):\n”, n, n);

For (int I = 0; I < n; i++) {

For (int j = 0; j < n; j++) {

Scanf(“%d”, &graph[i][j]);

calculateInOutDegree(graph, n);

return 0;

```

### Q1. B) Write a C program to sort elements of a singly linked list in ascending order.

```c
#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));

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 sortList(struct Node** head) {

Struct Node *current, *index;

Int temp;

For (current = *head; current != NULL; current = current->next) {

For (index = current->next; index != NULL; index = index->next) {

If (current->data > index->data) {

Temp = current->data;

Current->data = index->data;

Index->data = temp;
}

Void displayList(struct Node* head) {

Struct Node* temp = head;

If (temp == NULL) {

Printf(“List is empty!\n”);

Return;

While (temp != NULL) {

Printf(“%d “, temp->data);

Temp = temp->next;

Printf(“\n”);

Int main() {

Struct Node* head = NULL;

Int n, data;

Printf(“Enter number of nodes: “);

Scanf(“%d”, &n);

Printf(“Enter %d values: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &data);

insertNode(&head, data);

}
sortList(&head);

printf(“Sorted Singly Linked List: “);

displayList(head);

return 0;

```

### Q1. A) Write a C program to accept a polynomial and display it (e.g.,


6x^4+2x^2+5x^1+3).

```c

#include <stdio.h>

#define MAX 100

Struct Term {

Int coeff;

Int exp;

};

Void displayPolynomial(struct Term poly[], int n) {

For (int I = 0; I < n; i++) {

If (poly[i].coeff == 0) continue;

If (I > 0 && poly[i].coeff > 0) printf(“+”);

If (poly[i].exp == 0)

Printf(“%d”, poly[i].coeff);

Else if (poly[i].exp == 1)

Printf(“%dx”, poly[i].coeff);
Else

Printf(“%dx^%d”, poly[i].coeff, poly[i].exp);

Printf(“\n”);

Int main() {

Int n;

Printf(“Enter number of terms: “);

Scanf(“%d”, &n);

Struct Term poly[MAX];

Printf(“Enter %d terms (coefficient exponent):\n”, n);

For (int I = 0; I < n; i++) {

Scanf(“%d %d”, &poly[i].coeff, &poly[i].exp);

Printf(“Polynomial: “);

displayPolynomial(poly, n);

return 0;

```

### Q1. B) Write a C program to implement a static stack with Initialize, Push, Pop,
IsEmpty, IsFull, Display operations.

```c

#include <stdio.h>
#define MAX 100

Struct Stack {

Int arr[MAX];

Int top;

};

Void initialize(struct Stack* s) {

s->top = -1;

Int isEmpty(struct Stack* s) {

Return s->top == -1;

Int isFull(struct Stack* s) {

Return s->top == MAX – 1;

Void push(struct Stack* s, int data) {

If (isFull(s)) {

Printf(“Stack overflow!\n”);

Return;

s->arr[++s->top] = data;

Int pop(struct Stack* s) {

If (isEmpty(s)) {

Printf(“Stack underflow!\n”);

Return -1;

}
Return s->arr[s->top--];

Void display(struct Stack* s) {

If (isEmpty(s)) {

Printf(“Stack is empty!\n”);

Return;

Printf(“Stack: “);

For (int I = 0; I <= s->top; i++) {

Printf(“%d “, s->arr[i]);

Printf(“\n”);

Int main() {

Struct Stack s;

Initialize(&s);

Int choice, data;

Do {

Printf(“\n1. Push\n2. Pop\n3. Display\n4. Exit\nEnter choice: “);

Scanf(“%d”, &choice);

Switch (choice) {

Case 1:

Printf(“Enter data: “);

Scanf(“%d”, &data);

Push(&s, data);

Break;
Case 2:

Data = pop(&s);

If (data != -1) printf(“Popped: %d\n”, data);

Break;

Case 3:

Display(&s);

Break;

Case 4:

Break;

Default:

Printf(“Invalid choice!\n”);

} while (choice != 4);

Return 0;

```

### Q1. A) Write a C program to reverse each word of a string using a static stack.

```c

#include <stdio.h>

#include <string.h>

#define MAX 100

Struct Stack {

Char arr[MAX];
Int top;

};

Void initStack(struct Stack* s) {

s->top = -1;

Void push(struct Stack* s, char c) {

If (s->top == MAX – 1) return;

s->arr[++s->top] = c;

Char pop(struct Stack* s) {

If (s->top == -1) return ‘\0’;

Return s->arr[s->top--];

Void reverseWords(char str[]) {

Struct Stack s;

initStack(&s);

char result[MAX] = “”;

int j = 0;

for (int I = 0; str[i] != ‘\0’; i++) {

if (str[i] != ‘ ‘) {

push(&s, str[i]);

} else {

While (!isEmpty(&s)) {

Result[j++] = pop(&s);

Result[j++] = ‘ ‘;
}

While (!isEmpty(&s)) {

Result[j++] = pop(&s);

Result[j] = ‘\0’;

Strcpy(str, result);

Int isEmpty(struct Stack* s) {

Return s->top == -1;

Int main() {

Char str[MAX];

Printf(“Enter a string: “);

Fgets(str, MAX, stdin);

Str[strcspn(str, “\n”)] = 0; // Remove newline

reverseWords(str);

printf(“Reversed words: %s\n”, str);

return 0;

```

### Q1. B) Write a C program to accept two polynomials and find their addition.

```c
#include <stdio.h>

#define MAX 100

Struct Term {

Int coeff;

Int exp;

};

Void addPolynomials(struct Term poly1[], int n1, struct Term poly2[], int n2, struct Term
result[], int* n3) {

Int I = 0, j = 0, k = 0;

While (I < n1 && j < n2) {

If (poly1[i].exp == poly2[j].exp) {

Result[k].coeff = poly1[i].coeff + poly2[j].coeff;

Result[k].exp = poly1[i].exp;

I++;

J++;

} else if (poly1[i].exp > poly2[j].exp) {

Result[k] = poly1[i];

I++;

} else {

Result[k] = poly2[j];

J++;

If (result[k].coeff != 0) k++;

While (I < n1) {

Result[k] = poly1[i];
If (result[k].coeff != 0) k++;

I++;

While (j < n2) {

Result[k] = poly2[j];

If (result[k].coeff != 0) k++;

J++;

*n3 = k;

Void displayPolynomial(struct Term poly[], int n) {

For (int I = 0; I < n; i++) {

If (poly[i].coeff == 0) continue;

If (I > 0 && poly[i].coeff > 0) printf(“+”);

If (poly[i].exp == 0)

Printf(“%d”, poly[i].coeff);

Else if (poly[i].exp == 1)

Printf(“%dx”, poly[i].coeff);

Else

Printf(“%dx^%d”, poly[i].coeff, poly[i].exp);

Printf(“\n”);

Int main() {

Int n1, n2, n3;

Struct Term poly1[MAX], poly2[MAX], result[MAX];


Printf(“Enter number of terms for first polynomial: “);

Scanf(“%d”, &n1);

Printf(“Enter %d terms (coefficient exponent):\n”, n1);

For (int I = 0; I < n1; i++) {

Scanf(“%d %d”, &poly1[i].coeff, &poly1[i].exp);

Printf(“Enter number of terms for second polynomial: “);

Scanf(“%d”, &n2);

Printf(“Enter %d terms (coefficient exponent):\n”, n2);

For (int I = 0; I < n2; i++) {

Scanf(“%d %d”, &poly2[i].coeff, &poly2[i].exp);

addPolynomials(poly1, n1, poly2, n2, result, &n3);

printf(“Resultant polynomial: “);

displayPolynomial(result, n3);

return 0;

```

### Q1. A) Write a C program to sort n elements using Insertion Sort.

```c

#include <stdio.h>

Void insertionSort(int arr[], int n) {

For (int I = 1; I < n; i++) {


Int key = arr[i];

Int j = I – 1;

While (j >= 0 && arr[j] > key) {

Arr[j + 1] = arr[j];

j--;

Arr[j + 1] = key;

Int main() {

Int n;

Printf(“Enter size of array: “);

Scanf(“%d”, &n);

Int arr[n];

Printf(“Enter %d elements: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &arr[i]);

insertionSort(arr, n);

printf(“Sorted array: “);

for (int I = 0; I < n; i++) {

printf(“%d “, arr[i]);

Printf(“\n”);

Return 0;

}
```

### Q1. A) Write a C program to sort n elements using Quick Sort.

```c

#include <stdio.h>

Void swap(int* a, int* b) {

Int temp = *a;

*a = *b;

*b = temp;

Int partition(int arr[], int low, int high) {

Int pivot = arr[high];

Int I = low – 1;

For (int j = low; j < high; j++) {

If (arr[j] <= pivot) {

I++;

Swap(&arr[i], &arr[j]);

Swap(&arr[I + 1], &arr[high]);

Return I + 1;

Void quickSort(int arr[], int low, int high) {

If (low < high) {


Int pi = partition(arr, low, high);

quickSort(arr, low, pi – 1);

quickSort(arr, pi + 1, high);

Int main() {

Int n;

Printf(“Enter size of array: “);

Scanf(“%d”, &n);

Int arr[n];

Printf(“Enter %d elements: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &arr[i]);

quickSort(arr, 0, n – 1);

printf(“Sorted array: “);

for (int I = 0; I < n; i++) {

printf(“%d “, arr[i]);

Printf(“\n”);

Return 0;

```
### Q1. B) Write a C program to create a string array with words ending in ‘at’ or ‘an’ and
sort using Merge Sort.

```c

#include <stdio.h>

#include <string.h>

#define MAX 100

Void merge(char arr[][MAX], int l, int m, int r) {

Int n1 = m – l + 1, n2 = r – m;

Char L[n1][MAX], R[n2][MAX];

For (int I = 0; I < n1; i++) strcpy(L[i], arr[l + i]);

For (int I = 0; I < n2; i++) strcpy(R[i], arr[m + 1 + i]);

Int I = 0, j = 0, k = l;

While (I < n1 && j < n2) {

If (strcmp(L[i], R[j]) <= 0) {

Strcpy(arr[k], L[i]);

I++;

} else {

Strcpy(arr[k], R[j]);

J++;

K++;

While (I < n1) {

Strcpy(arr[k], L[i]);

I++;
K++;

While (j < n2) {

Strcpy(arr[k], R[j]);

J++;

K++;

Void mergeSort(char arr[][MAX], int l, int r) {

If (l < r) {

Int m = l + (r – l) / 2;

mergeSort(arr, l, m);

mergeSort(arr, m + 1, r);

merge(arr, l, m, r);

Int main() {

Int n = 5;

Char arr[MAX][MAX] = {“hat”, “cat”, “man”, “fan”, “rat”};

Printf(“Original array:\n”);

For (int I = 0; I < n; i++) {

Printf(“%s “, arr[i]);

Printf(“\n”);

mergeSort(arr, 0, n – 1);

printf(“Sorted array:\n”);
for (int I = 0; I < n; i++) {

printf(“%s “, arr[i]);

Printf(“\n”);

Return 0;

```

### Q1. A) Write a C program to perform Binary Search (Recursive) on a sorted array.

```c

#include <stdio.h>

Int binarySearch(int arr[], int low, int high, int key) {

If (low > high) return -1;

Int mid = low + (high – low) / 2;

If (arr[mid] == key) return mid;

If (arr[mid] > key)

Return binarySearch(arr, low, mid – 1, key);

Return binarySearch(arr, mid + 1, high, key);

Int main() {

Int n, key;

Printf(“Enter size of sorted array: “);

Scanf(“%d”, &n);

Int arr[n];
Printf(“Enter %d elements in ascending order: “, n);

For (int I = 0; I < n; i++) {

Scanf(“%d”, &arr[i]);

Printf(“Enter value to search: “);

Scanf(“%d”, &key);

Int result = binarySearch(arr, 0, n – 1, key);

If (result != -1) {

Printf(“Value %d found at index %d.\n”, key, result);

} else {

Printf(“Value %d not found in array.\n”, key);

Return 0;

```

### Q1. A) Write a C program to traverse a graph using BFS.

```c

#include <stdio.h>

#define MAX 100

Struct Queue {

Int arr[MAX];

Int front, rear;

};
Void initQueue(struct Queue* q) {

q->front = q->rear = -1;

Void enqueue(struct Queue* q, int data) {

If (q->rear == MAX – 1) return;

If (q->front == -1) q->front = 0;

q->arr[++q->rear] = data;

Int dequeue(struct Queue* q) {

If (q->front == -1 || q->front > q->rear) return -1;

Return q->arr[q->front++];

Void bfs(int graph[][MAX], int n, int start) {

Int visited[MAX] = {0};

Struct Queue q;

initQueue(&q);

visited[start] = 1;

enqueue(&q, start);

printf(“BFS Traversal: “);

while ([Link] <= [Link]) {

int vertex = dequeue(&q);

printf(“%d “, vertex);

for (int I = 0; I < n; i++) {

if (graph[vertex][i] && !visited[i]) {

visited[i] = 1;

enqueue(&q, i);
}

Printf(“\n”);

Int main() {

Int n, start;

Printf(“Enter number of vertices: “);

Scanf(“%d”, &n);

Int graph[MAX][MAX];

Printf(“Enter adjacency matrix (%d x %d):\n”, n, n);

For (int I = 0; I < n; i++) {

For (int j = 0; j < n; j++) {

Scanf(“%d”, &graph[i][j]);

Printf(“Enter starting vertex: “);

Scanf(“%d”, &start);

Bfs(graph, n, start);

Return 0;

```

### Notes on Repeated Questions


- **Find and Replace Array Elements**: Repeated multiple times; refer to the solution
under “Q1. A) Write a ‘C’ program to accept n elements, store them in an array, and find and
replace a given number.”

- **Queue Reversal**: Repeated; refer to “Q1. B) Write a program to reverse the elements of
a queue (Use Static implementation of Queue).”

- **Binary Tree Create and Display**: Repeated; refer to “Q1. B) Write C programs to
implement create and display operation for binary tree.”

- **BST Leaf and Total Nodes**: Repeated; refer to “Q1. B) Write a C Program to implement
the following functions on Binary Search Tree: To count leaf nodes, To count total number
of nodes.”

- **Product of Leaf Nodes**: Repeated; refer to “Q1. B) Write a C Program to find the
product of all leaf nodes of a binary tree.”

- **Singly Linked List Create and Display**: Repeated; refer to “Q1. B) Write a C program to
implement a singly linked list with Create and Display operation.”

- **Total Degree of Vertices**: Repeated; refer to “Q1. B) Write a C program to display the
total degree of each vertex.”

All programs are designed to be error-free, modular, and include input validation where
necessary. If you need specific modifications, additional features, or further explanations,
please specify!

You might also like