Challenge

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

Embedded Live Batch 

Project 1 -

Aim -  To Implement Mathematical Set Theory using C programming language. Ask the User to give the input like two list of data and the program will give the output as the union and intersection of these two lists.

Program - 

/*
 * Set.c
 *
 *  Created on: Oct 13, 2022
 *      Author: shri
 */
#include 
#include 

struct Node {           // Link list node
    int data;
    struct Node* next;
};


void push(struct Node** head_ref, int new_data)       // A utility function to insert a node at the beginning of a linked list
{

    struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));   // allocate node

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

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

    (*head_ref) = new_node;  // move the head to point to the new node
}

int isPresent(struct Node* head, int data) // function that returns true if data is present in linked list else return false
{
    struct Node* t = head;
    while (t != NULL)
    {
        if (t->data == data)
        {
            return 1;
        }
        t = t->next;
    }
    return 0;
}
struct Node* getIntersection(struct Node* head1, struct Node* head2)  // Function to get intersection of two linked lists head1 and head2
{
    struct Node* result = NULL;
    struct Node* t1 = head1;

    while (t1 != NULL)           // Traverse list1 and search each element of it in list2. If the element is present in list 2, then insert the element to result
    {
        if (isPresent(head2, t1->data))
        {
            push(&result, t1->data);
        }
        t1 = t1->next;
    }
    return result;
}

struct Node* getUnion(struct Node* head1, struct Node* head2)  // Function to get union of two linked lists head1 and head2
{
    struct Node* result = NULL;
    struct Node *t1 = head1, *t2 = head2;

    while (t1 != NULL)                        // Insert all elements of list1 to the result list
    {
        push(&result, t1->data);
        t1 = t1->next;
     }

    while (t2 != NULL)                     // Insert those elements of list2 which are not present in result list
    {
        if (!isPresent(result, t2->data))
        {
            push(&result, t2->data);
        }
        t2 = t2->next;
    }
    return result;
}

void printList(struct Node* node)  // function to print a linked list
{
    while (node != NULL)
    {
        printf("%d ", node->data);
        node = node->next;
    }
}

int main()          // Main Function Of the Program
{
    int n,m,temp;
    printf("enter the value of number of value in link list(both):-");
    fflush(stdout);
    scanf("%d %d", &n, &m);

    struct Node* head1 = NULL;            // Start structure pointer with the empty list
    struct Node* head2 = NULL;
    struct Node* intersecn = NULL;
    struct Node* unin = NULL;

    for(int i=0;i

Theory - 

  • We have created different functions like push, isPresent, getUnion, getIntersection and printlist to execute the program.
  • A linked list is a sequence of data structures, which are connected together via links. We have to create two lists and find the intersection and union of two lists.
  • Intersection will give us the common numbers from the two lists. 
  • The union will give us all the elements present in both the sets.

Results -

        

  • Hence, the program is successfully executed.
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.