Project 1 - Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory)
Project 1:-
#include<stdbool.h> //preprocessor directive
#include<stdio.h> //preprocessor directive for calling an a standard library functions
#include<stdlib.h> //preprocessor directive for an standard boolean expression
//Link list node
struct Node {
int data; //the data called in the form an int data type
struct Node* next; //pointer next node valueis stored in an struct data type
};
//Function declaration
void push(struct Node** head_ref, int new_data);
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 lists 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
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 begining 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;
}
//function to print a linked list
void printList(struct Node* node)
{
while(node!=NULL)
{
printf("%d",node->data); //print the node as data
node=node->next;
}
}
//function that returns true if data is present in linked list else return
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):-"); //console input output statement
fflush(stdout); //to find the bug or to clear the error
scanf("%d%d", &n, &m); //console input output statement
//Starth structure pointer with the empty list
struct Node* head1=NULL; //structure node for head1
struct Node* head2=NULL; //structure node for head2
struct Node* intersecn=NULL; //structure node for intersection
struct Node* unin=NULL; //structure node for union
//for loop for link list1
for(int i=0;i<n;i++) //here loop got executed
{
printf("Enter the value in link list1 %d:-",i); //console input output statement
fflush(stdout); //to find the bug or to clear the error
scanf("%d", &temp); //console input output statement
push(&head1, temp);
}
//for loop for link list2
for(int i=0;i<m;i++)
{
printf("Enter the value in link list2 %d:-",i); //console input output statement
fflush(stdout); //to find the bug or to clear the error
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;
}
output:
enter the value of number of value in link list(both):-2 3
Enter the value in link list1 0:-3
Enter the value in link list1 1:-4
Enter the value in link list2 0:-5
Enter the value in link list2 1:-6
Enter the vslue in link list2 2:-7
First list is 4 3
Second list is 7 6 5
Intersection list is
Union list is 5 6 7 3 4