Challenge

Project 1 - Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory) using Linked List

Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory) using Linked List

#include<stdbool.h>
#include<stdio.h>
#include<stdlib.h>
/* Link list node */
struct Node {
int data;
struct Node* next;
};

/* function to insert a node at the beginning ofa linked list*/
void push(struct Node** head_ref, int new_data);

/* function to check if given data is present in a list */
int isPresent(struct Node* head, int data);

/* Function to get union of two linked lists head1 and head2 */
struct Node* getUnion(struct Node* head1,
struct Node* head2)
{
struct Node* result = NULL;
struct Node *t1 = head1, *t2 = head2;

// Insert all elements of list1 to the result list
while (t1 != NULL)
{
push(&result, t1->data);
t1 = t1->next;
}

// Insert those elements of list2 which are not present in result list
while (t2 != NULL)
{
if (!isPresent(result, t2->data))
push(&result, t2->data);
t2 = t2->next;
}

return result;
}

/* Function to get intersection of two linked lists head1 and head2 */
struct Node* getIntersection(struct Node* head1,
struct Node* head2)
{
struct Node* result = NULL;
struct Node* t1 = head1;

// Traverse list1 and search each element of it in list2. If the element is present in list 2, then insert the element to result
while (t1 != NULL)
{
if (isPresent(head2, t1->data))
push(&result, t1->data);
t1 = t1->next;
}

return result;
}

/* function to insert a
node at the beginning of a linked list*/
void push(struct Node** head_ref, int new_data)
{
/* allocate node */
struct Node* new_node
= (struct Node*)malloc(sizeof(struct Node));

/* put in the data */
new_node->data = new_data;

/* link the old list of the new node */
new_node->next = (*head_ref);

/* move the head to point to the new node */
(*head_ref) = new_node;
}

/* A utility function to print a linked list*/
void printList(struct Node* node)
{
while (node != NULL)
{
printf("%d ", node->data);
node = node->next;
}
}

/* A utility function that returns true if data is
present in linked list else return false */
int isPresent(struct Node* head, int data)
{
struct Node* t = head;
while (t != NULL) {
if (t->data == data)
return 1;
t = t->next;
}
return 0;
}

/* Driver program to test above function*/
int main()
{
int n,m,temp;
printf("enter the value of number of value in link list(both):-");

scanf("%d %d", &n, &m);
/*Starth structure pointer with the empty list*/
struct Node* head1 = NULL;
struct Node* head2 = NULL;
struct Node* intersecn = NULL;
struct Node* unin = NULL;
/*for loop for link list1*/
for(int i=0;i<n;i++)
{
printf("Enter the value in link list1 %d:-",i);

scanf("%d", &temp);
push(&head1, temp);
}
/*for loop for link list2*/
for(int i=0;i<m;i++)
{
printf("Enter the value in link list2 %d:-",i);

scanf("%d", &temp);
push(&head2, temp);

}
/*call the function of intersection*/
intersecn = getIntersection(head1, head2);
/*call the function of union*/
unin = getUnion(head1, head2);
printf("n First list is ");
/*function calling with structure pointer as argument*/
printList(head1);
printf("n Second list is ");
printList(head2);
printf("n Intersection list is ");
printList(intersecn);
printf("n Union list is ");
printList(unin);
return 0;
}

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.