Introduction to programming in C Week 8

Course Name: Introduction to programming in C

Course Link: Click Here

These are Introduction to programming in C Assignment 8 Answers


Question 1

In this question, you have to write code to remove the first node in a doubly linked list containing a specified number. The code to create the linked list is already given.
The main() function calls a function removeData(head,tail,n) to remove the first node containing data n from the linked list.
Complete the code by writing the missing function. You can also write additional functions which you may need.

These are Introduction to programming in C Assignment 8 Answers

Input Format
You will be given a positive number N in the first line.
This will be followed by a line containing N integers.
This will be followed by an integer M.
Output format
The output will be the list after deleting M.
Note : Only delete the first occurrence of M in list. If M is not present in the list, no change should happen to the list. Maintain the remaining elements in the original order.
Note : You do not have to add any additional code to print the list – once you code the removeData() function, the code will print the contents of the remaining list.

These are Introduction to programming in C Assignment 8 Answers

Solution

#include <stdio.h>
#include <stdlib.h>

struct DoublyLinkedList {
  int data;
  struct DoublyLinkedList *prev, *next;
};

void initializeList(struct DoublyLinkedList **head, struct DoublyLinkedList **tail, int data) {
  *head = (struct DoublyLinkedList*) malloc(sizeof(struct DoublyLinkedList));
  (*head)->data = data;
  (*head)->prev = NULL;
  (*head)->next = NULL;
  *tail = *head;
}

void appendNode(struct DoublyLinkedList **tail, int data) {
  struct DoublyLinkedList *newNode = (struct DoublyLinkedList*) malloc(sizeof(struct DoublyLinkedList));
  newNode->data = data;
  newNode->prev = *tail;
  newNode->next = NULL;
  (*tail)->next = newNode;
  *tail = newNode;
}

void printList(struct DoublyLinkedList *head, struct DoublyLinkedList *tail) {
  while (head != NULL) {
    printf("%d", head->data);
    if (head != tail) {
      printf(",");
    }
    head = head->next;
  }
}

void removeData(struct DoublyLinkedList **headptr, struct DoublyLinkedList **tailptr, int n) {
  struct DoublyLinkedList *current = *headptr;

  // Find the node to be removed
  while (current != NULL && current->data != n) {
    current = current->next;
  }

  // If the node is not found, do nothing
  if (current == NULL) {
    return;
  }

  // If the node is the head
  if (current == *headptr) {
    *headptr = current->next;
    if (*headptr != NULL) {
      (*headptr)->prev = NULL;
    }
  }
  // If the node is the tail
  else if (current == *tailptr) {
    *tailptr = current->prev;
    (*tailptr)->next = NULL;
  }
  // If the node is in the middle
  else {
    current->prev->next = current->next;
    current->next->prev = current->prev;
  }

  free(current);
}

int main() {
  int n;
  int i = 0;
  int m;
  struct DoublyLinkedList *head, *tail;
  scanf("%d", &n);
  if (n <= 0) {
    return 0;
  }
  scanf("%d", &m);
  initializeList(&head, &tail, m);
  for (i = 1; i < n; i++) {
    /* read the remaining elements */
    scanf("%d", &m);
    appendNode(&tail, m);
  }

  scanf("%d", &n);
  removeData(&head, &tail, n);
  printList(head, tail);
  return 0;
}

These are Introduction to programming in C Assignment 8 Answers


Question 2

You are given a non-negative number less than 10000000 (1 followed by 7 zeroes). You have to divide the number into the following components, and print them in the following order.
1. The part of the number which is less than a thousand.
2. The part of the number which is between a thousand and a lakh (10^5)
3. The part of the number which is between a lakh and a crore (10^7)
You should terminate printing when no higher power of 10 is present to be printed.
Sample input
134847
Sample Output
847
34
1

    These are Introduction to programming in C Assignment 8 Answers

    Solution

    #include <stdio.h>
    
    int main() {
        int num;
        scanf("%d", &num);
        int crore = num / 10000000;
        num %= 10000000;
        int lakh = num / 100000;
        num %= 100000;
        int thousand = num / 1000;
        num %= 1000;
        int lessThanThousand = num;
    
        if (crore > 0) {
            printf("%d\n", lessThanThousand);
           printf("%d\n", thousand);
          printf("%d\n", lakh);
           printf("%d", crore);
        } else if (lakh > 0) {
           printf("%d\n", lessThanThousand);
           printf("%d\n", thousand);
          printf("%d", lakh);
        } else if (thousand > 0) {
           printf("%d\n", lessThanThousand);
           printf("%d", thousand);
        } else {
            printf("%d", lessThanThousand);
        }
    
        return 0;
    }

    These are Introduction to programming in C Assignment 8 Answers

    More Weeks of Introduction to programming in C: Click Here

    More Nptel courses: https://progiez.com/nptel



    These are Introduction to programming in C Assignment 8 Answers


    These are Introduction to programming in C Assignment 8 Answers