From 8e68c6a7514d19f535b0d1a2fcd15a97e8f7a30a Mon Sep 17 00:00:00 2001 From: Aadit Agrawal Date: Tue, 15 Oct 2024 10:59:49 +0530 Subject: [PATCH] Update DS/C/Lab/Week8/DLLUnionIntersec.c --- DS/C/Lab/Week8/DLLUnionIntersec.c | 59 +++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/DS/C/Lab/Week8/DLLUnionIntersec.c b/DS/C/Lab/Week8/DLLUnionIntersec.c index 5030bed..1d7eedb 100644 --- a/DS/C/Lab/Week8/DLLUnionIntersec.c +++ b/DS/C/Lab/Week8/DLLUnionIntersec.c @@ -1,5 +1,3 @@ -// Write a program to implement union and intersection of two doubly linked lists. - #include #include @@ -14,7 +12,7 @@ typedef struct node *NODE; NODE getnode() { NODE x; x = (NODE)malloc(sizeof(struct node)); - if(x == NULL) { + if (x == NULL) { printf("Out of memory\n"); exit(0); } @@ -26,13 +24,13 @@ void insert_rear(NODE *head, int item) { temp = getnode(); temp->data = item; temp->next = NULL; - if(*head == NULL) { + if (*head == NULL) { temp->prev = NULL; *head = temp; return; } cur = *head; - while(cur->next != NULL) + while (cur->next != NULL) cur = cur->next; cur->next = temp; temp->prev = cur; @@ -41,22 +39,22 @@ void insert_rear(NODE *head, int item) { NODE union_lists(NODE head1, NODE head2) { NODE result = NULL; NODE temp = head1; - while(temp != NULL) { + while (temp != NULL) { insert_rear(&result, temp->data); temp = temp->next; } temp = head2; - while(temp != NULL) { + while (temp != NULL) { NODE cur = result; int found = 0; - while(cur != NULL) { - if(cur->data == temp->data) { + while (cur != NULL) { + if (cur->data == temp->data) { found = 1; break; } cur = cur->next; } - if(!found) + if (!found) insert_rear(&result, temp->data); temp = temp->next; } @@ -66,10 +64,10 @@ NODE union_lists(NODE head1, NODE head2) { NODE intersection_lists(NODE head1, NODE head2) { NODE result = NULL; NODE temp = head1; - while(temp != NULL) { + while (temp != NULL) { NODE cur = head2; - while(cur != NULL) { - if(temp->data == cur->data) { + while (cur != NULL) { + if (temp->data == cur->data) { insert_rear(&result, temp->data); break; } @@ -82,9 +80,42 @@ NODE intersection_lists(NODE head1, NODE head2) { void display(NODE head) { NODE temp = head; - while(temp != NULL) { + while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } + +int main() { + NODE list1 = NULL; + NODE list2 = NULL; + + // Inserting elements into list1 + insert_rear(&list1, 1); + insert_rear(&list1, 2); + insert_rear(&list1, 3); + + // Inserting elements into list2 + insert_rear(&list2, 3); + insert_rear(&list2, 4); + insert_rear(&list2, 5); + + // Displaying the lists + printf("List 1: "); + display(list1); + printf("List 2: "); + display(list2); + + // Union of the lists + NODE union_result = union_lists(list1, list2); + printf("Union: "); + display(union_result); + + // Intersection of the lists + NODE intersection_result = intersection_lists(list1, list2); + printf("Intersection: "); + display(intersection_result); + + return 0; +}