c prog
c prog
7
18. Write a Program to sort given Array using 19. Write Program to implement Singly Linked
selection sort technique. List.
• #include <stdio.h> • #include <stdio.h>
• void selectionSort(int arr[], int size) { • #include <stdlib.h>
• for (int i = 0; i < size - 1; i++) { • typedef struct Node {
• int minIndex = i; • int data;
• for (int j = i + 1; j < size; j++) { • struct Node* next;
• if (arr[j] < arr[minIndex]) { • } Node;
• minIndex = j; • Node* createNode(int data) {
•} • Node* newNode = (Node*)
•} malloc(sizeof(Node));
• int temp = arr[minIndex]; • newNode->data = data;
• arr[minIndex] = arr[i]; • newNode->next = NULL;
• arr[i] = temp; • return newNode;
•} •}
•} • void insertNode(Node** head, int data) {
• void printArray(int arr[], int size) { • Node* newNode = createNode(data);
• for (int i = 0; i < size; i++) { • if (*head == NULL) {
• printf("%d ", arr[i]); • *head = newNode;
•} • } else {
• printf("\n"); • Node* temp = *head;
•} • while (temp->next != NULL) {
• int main() { • temp = temp->next;
• int arr[] = {64, 34, 25, 12, 22, 11, 90}; •}
• int size = sizeof(arr) / sizeof(arr[0]); • temp->next = newNode;
• printf("Original array: "); •}
• printArray(arr, size); •}
• selectionSort(arr, size); • void printList(Node* head) {
• printf("Sorted array: "); • while (head != NULL) {
• printArray(arr, size); • printf("%d -> ", head->data);
• return 0; • head = head->next;
•} •}
• printf("NULL\n");
•}
• int main() {
• Node* head = NULL;
• insertNode(&head, 10);
• insertNode(&head, 20);
• insertNode(&head, 30);
• printList(head);
• return 0;
•}
8
20. Write Program to implement Double Linked • Node* temp = *head;
List. • while (temp->next != NULL) {
• #include <stdio.h> • if (temp->next->data == data) {
• #include <stdlib.h> • Node* nodeToDelete = temp->next;
• typedef struct Node { • temp->next = temp->next->next;
• int data; • if (temp->next != NULL) {
• struct Node* prev; • temp->next->prev = temp;
• struct Node* next; • }
• } Node; • free(nodeToDelete);
• Node* createNode(int data) { • return;
• Node* newNode = (Node*) • }
malloc(sizeof(Node)); • temp = temp->next;
• newNode->data = data; • }
• newNode->prev = NULL; • printf("Node not found\n");
• newNode->next = NULL; • }
• return newNode; • void printList(Node* head) {
•} • while (head != NULL) {
• void insertAtBeginning(Node** head, int data) { • printf("%d -> ", head->data);
• Node* newNode = createNode(data); • head = head->next;
• if (*head == NULL) { • }
• *head = newNode; • printf("NULL\n");
• } else { • }
• newNode->next = *head; • int main() {
• (*head)->prev = newNode; • Node* head = NULL;
• *head = newNode; • insertAtEnd(&head, 10);
•} • insertAtEnd(&head, 20);
•} • insertAtEnd(&head, 30);
• void insertAtEnd(Node** head, int data) { • insertAtBeginning(&head, 5);
• Node* newNode = createNode(data); • printf("Double Linked List: ");
• if (*head == NULL) { • printList(head);
• *head = newNode; • deleteNode(&head, 20);
• } else { • printf("After deleting 20: ");
• Node* temp = *head; • printList(head);
• while (temp->next != NULL) { • return 0;
• temp = temp->next; • }
•}
• temp->next = newNode;
• newNode->prev = temp;
•}
•}
• void deleteNode(Node** head, int data) {
• if (*head == NULL) {
• printf("List is empty\n");
• return;
•}
• if ((*head)->data == data) {
• Node* temp = *head;
• *head = (*head)->next;
• if (*head != NULL) {
• (*head)->prev = NULL;
•}
• free(temp);
• return;
•} 9