Challenge

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

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.