Project 1 - Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory) using Linked List
A linked list is a linear data structure containing a collection of data elements called nodes each data element contains two parts, that is payload or data,or real world information.

The linked field contains the address of the adjacent node.
How to Check Linked List is Linear or Not in C - Dot Net Tutorials
To terminate the linked list "NULL" keyword is used. Any value which needs to be inserted further can be only inserted from NULL position and not from the header.
Initialization of the LinkedList should be implemented with the concept called node. This is only a variable name which is very often used.
typedef struct node{
int data; //data is used to store values
struct node *next; //node *next is a memory address of next node
}Node; //redefine the structure named node as Node for convenience
The reason of defining pointer *next as struct node*next and not int *next is that we need to invoke the compiler to call the struct node recursively because doing so will link the nodes with each other.
In this project set theory is implemented with the help of concept of single LinkedList. In this linked list 5 separate functions are defined and declared individually and then called inside the main function.
The operations needed to be done are :
Insert
Display
Compare
Union
Intersection
The expected output of the program is we get the union and intersection of the two lists and the data type is user defined.Insert Function:
Node *insert_node(Node *head_ref,int n)//declaration of insert function
Program steps
Step 1: Create head1 a linked list node
Step 2: To insert a node at the beginning of a linked list
Step 3: To check if given data is present in a list
Step 4: To get union of two linked lists head1 and Head2
Step 5: To Insert all elements of list1 to the result list
Step 6: To insert those elements of list2 which are not present in result list
Step 7: To get intersection of two linked lists and head2
Step 8: To Transverse list1 and search each element of it in list2. If the element is present in list 2, then insert the element to result.
Step 9: To insert a node at the beginning of a linked list
Step 10: To allocate the memory of node.
Step 11: To link old list of the new node
Step 12: To move the head to point a linked list
Step 13: To utility function that returns true if data is present in linked list else return false.
Step 14: To test the above functions.
Step 15: To Print the sequences.
Step 16: End of the process.
Program
/*
* pro.c
*
* Created on: Mar 22, 2023
* Author: KARTHIK
*/
#include
#include
#include
struct Node
{
int data;
struct Node* next;
};
void push(struct Node** head_ref, int new_data);
bool isPresent(struct Node* head, int data);
struct Node* getUnion(
struct Node* head1,
struct Node* head2)
{
struct Node* result = NULL;
struct Node *t1 = head1, *t2 = head2;
while (t1 != NULL) {
push(&result, t1->data);
t1 = t1->next;
}
while (t2 != NULL) {
if (!isPresent(result, t2->data))
push(&result, t2->data);
t2 = t2->next;
}
return result;
}
struct Node* getIntersection(struct Node* head1, struct Node* head2)
{
struct Node* result = NULL;
struct Node* t1 = head1;
while (t1 != NULL)
{
if (isPresent(head2, t1->data))
push(&result, t1->data);
t1 = t1->next;
}
return result;
}
void push(struct Node** head_ref, int new_data)
{
struct Node* new_node
= (struct Node*)malloc(sizeof(struct Node));
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
void printList(struct Node* node)
{
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
}
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;
}
int main()
{
int a,b,c,d,w,x,y,z;
struct Node* head1 = NULL;
struct Node* head2 = NULL;
struct Node* intersecn = NULL;
struct Node* unin = NULL;
printf("Enter the 4 elements for the 1st array");
fflush(stdout);
scanf("\n%d",&a);
scanf("\n%d",&b);
scanf("\n%d",&c);
scanf("\n%d",&d);
printf("Enter the 4 elements for the 2nd array");
fflush(stdout);
scanf("\n%d",&w);
scanf("\n%d",&x);
scanf("\n%d",&y);
scanf("\n%d",&z);
push(&head1, a);
push(&head1, b);
push(&head1, c);
push(&head1, d);
push(&head2, w);
push(&head2, x);
push(&head2, y);
push(&head2, z);
intersecn = getIntersection(head1, head2);
unin = getUnion(head1, head2);
printf("\n First list is \n");
printList(head1);
printf("\n Second list is \n");
printList(head2);
printf("\n Intersection list is \n");
printList(intersecn);
printf("\n Union list is \n");
printList(unin);
return 0;
}

Output
