Challenge

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

// C program to find union
// and intersection of two unsorted
// linked lists
#include
#include
#include
 
// Link list node
struct Node
{
int data;
struct Node* next;
};
 
/* A utility function to insert a
node at the beginning ofa linked list*/
void push(struct Node** head_ref,
int new_data);
 
/* A utility function to check if
given data is present in a list */
bool 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;
}
 
/* A utility 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 off 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 */
bool 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 code
int main()
{
// Start with the empty list
struct Node* head1 = NULL;
struct Node* head2 = NULL;
struct Node* intersecn = NULL;
struct Node* unin = NULL;
 
/* Create a linked lists
10->15->5->20 */
push(&head1, 11);
push(&head1, 54);
push(&head1, 64);
push(&head1, 10);
 
/* Create a linked list
8->4->2->10 */
push(&head2, 75);
push(&head2, 65);
push(&head2, 54);
push(&head2, 10);
 
intersecn = getIntersection(head1,
head2);
unin = getUnion(head1, head2);
 
printf("First list is ");
printList(head1);
 
printf("Second list is ");
printList(head2);
 
printf("Intersection list is ");
printList(intersecn);
 
printf("Union list is ");
printList(unin);
 
return 0;
}

output 

First list is 10 64 54 11

Second list is 10 54 65 75

Intersection list is 54 10

Union list is 75 65 11 54 64 10 

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.