Challenge

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

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

/*
* uni-intr.c
*
* Created on: 30-Nov-2022
* Author: lavanyajarpula715
*/
/* Implementation of interface for mathematical Set Theory using C programming.
* Giving two list of data as input to get the output as union & intersection for given list of data*/

//in this demonstration program i wrote a program based on topic linked list(circular linked list:it is derived
//from singly lin.list[where the address part of the last node contains the link to first])
// and i learnt this topic from an instructor in week-7 session-3

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

struct Node //stuct is a user defined data type used 2 group of elements of diff type (node=name of struct)
{
int data;
struct Node* next;
};//struct object

/* here function am used to insert a node at the beginning of a linked list*/
void push(struct Node** head_ref, int new_data);

/* here function am used to check if given data is present in a list */
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 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
* Given a reference (pointer to pointer) to the head of a list and
* an int, inserts a new node on the front of the list. */
void push(struct Node** head_ref, int new_data)
{
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));// allocate memory for the new head node

new_node->data = new_data; //put in the data

/* link the old list of the new node */
new_node->next = (*head_ref);

/* move the head to point to the new node */
(*head_ref) = new_node;
}
//This function prints contents of linked list starting from head
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 */
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):- ");
fflush(stdout);

scanf("%d %d", &n, &m);

//intializing the nodes as empty
struct Node* head1 = NULL;

struct Node* head2 = NULL;

struct Node* intersecn = NULL;

struct Node* unin = NULL;

for(int i=1; i<n; i++)

{
printf("Enter the value in link list1 %d:-",i);
fflush(stdout);

scanf("%d", &temp);

push(&head1, temp);
}
for(int i=2; i<m; i++)
{
printf("Enter the value in link list2 %d:-",i);
fflush(stdout);

scanf("%d", &temp);

push(&head2, temp);
}

intersecn = getIntersection(head1, head2);

unin = getUnion(head1, head2);

printf("\n First list is ");
fflush(stdout);

printList(head1);
printf("\n Second list is ");
fflush(stdout);

printList(head2);
printf("\n Intersection list is ");
fflush(stdout);

printList(intersecn);

printf("\n Union list is ");
fflush(stdout);

printList(unin);

return 0;
}

OUTPUT:1

enter the value of number of value in link list(both):- 7 4
Enter the value in link list1 1:-2
Enter the value in link list1 2:-6
Enter the value in link list1 3:-78
Enter the value in link list1 4:-3
Enter the value in link list1 5:-32
Enter the value in link list1 6:-2
Enter the value in link list2 2:-78
Enter the value in link list2 3:-32

First list is 2 32 3 78 6 2
Second list is 32 78
Intersection list is 78 32
Union list is 2 6 78 3 32 2

OUTPUT:2

enter the value of number of value in link list(both):- 5
6
Enter the value in link list1 1:-2
Enter the value in link list1 2:-3
Enter the value in link list1 3:-4
Enter the value in link list1 4:-5
Enter the value in link list2 2:-6
Enter the value in link list2 3:-7
Enter the value in link list2 4:-8
Enter the value in link list2 5:-9

First list is 5 4 3 2
Second list is 9 8 7 6
Intersection list is
Union list is 6 7 8 9 2 3 4 5

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.