Project 1 - Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory) using Linked List
ANS :
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
// Link list node
struct Node {
int data;
struct Node *next;
};
//function declaration
void push(struct Node **student_ref, int new_data);
int isPresent(struct Node *student, int data);
// Function to get union of two linked lists student1 and student2
struct Node* getUnion(struct Node *student1, struct Node *student2)
{
struct Node *result = NULL;
struct Node *y1 = student1, *y2 = student2;
// Insert all elements of list1 to the result list
while (y1 != NULL)
{
push(&result, y1->data);
y1 = y1->next;
}
// Insert those elements of list2 which are not present in result list
while (y2 != NULL) {
if (!isPresent(result, y2->data))
{
push(&result, y2->data);
}
y2 = y2->next;
}
return result;
}
// Function to get intersection of two linked lists student1 and student2
struct Node* getIntersection(struct Node *student1, struct Node *student2)
{
struct Node *result = NULL;
struct Node *y1 = student1;
// 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 (y1 != NULL)
{
if (isPresent(student2, y1->data))
{
push(&result, y1->data);
}
y1 = y1->next;
}
return result;
}
// A utility function to insert a node at the beginning of a linked list
void push(struct Node **student_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 = (*student_ref);
// move the head to point to the new node
(*student_ref) = new_node;
}
// function to print a linked list
void printList(struct Node *node)
{
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
}
// function that returns true if data is present in linked list else return false
int isPresent(struct Node *student, int data)
{
struct Node *y = student;
while (y != NULL)
{
if (y->data == data)
{
return 1;
}
y = y->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):-");
fflush(stdout);
scanf("%d %d", &n, &m);
// Starth structure pointer with the empty list
struct Node *student1 = NULL;
struct Node *student2 = 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);
fflush(stdout);
scanf("%d", &temp);
push(&student1, temp);
}
//for loop for link list2
for (int i = 0; i < m; i++) {
printf("Enter the value in link list2 %d:-", i);
fflush(stdout);
scanf("%d", &temp);
push(&student2, temp);
}
//call the function of intersection
intersecn = getIntersection(student1, student2);
//call the function of union
unin = getUnion(student1, student2);
printf("\n First list is ");
//function calling with structure pointer as argument
printList(student1);
printf("\n Second list is ");
printList(student2);
printf("\n Intersection list is ");
printList(intersecn);
printf("\n Union list is ");
printList(unin);
return 0;
}