Project 1 - Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory) using Linked List
1)
Overview of the project:
In this project, interfaces for mathematical set of theory are implemented using C programming language. User can give the input like two list of data and this program will give the output as the union and intersection of these two lists.
Goal:
Implementation of interface for mathematical set theory using c programming
Giving two list of data as input to get the output as union and intersection for given list of data
Key Highlights of the project:
Creating two list of data using linked list method
Insert the node to 1st and 2nd list accordingly.
Intersection of data to two list.
Getting union of two lists.
Deliverables of this project:
Intersection of data of two lists.
Union of data of two lists.
Expected outcomes:
Student will get the knowledge of creating the nodes using linked list.
Getting the intersection and union of data of two list.
Comparing the elements of two list.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct node
{
int data;
struct node *next;
}
Node;
static Node *head1, *head2, *head, *head_union, *head_intersection, *newnode, *tail, *res_union, *res_intersection;
Node *insert_node(Node *head_ref,int n);
void display_list(Node *head_ref);
Node *get_union(Node *head_pointer1,Node *head_pointer2);
Node *get_intersection(Node *head_pointer1,Node *head_pointer2);
int compare(Node *head,int data);
void display_list(Node *head_ref)
{
if(head_ref==0)
{
printf("List is empty. ");
}
else
{
tail = head_ref;
while(tail !=0)
{
printf("%d", tail->data);
tail = tail->next;
}
tail = newnode;
}
}
Node *insert_node(Node *head_ref,int n)
{
printf("\n Inserting Elements at the beginning... \n");
newnode =(Node*) malloc(sizeof(Node));
printf("Address of created newnode: %d\n", newnode);
newnode->data = n;
printf("Inserted value is: %d\n",newnode->data);
newnode->next = head_ref;
head_ref = newnode;
return head_ref;
}
Node *get_union(Node *head_pointer1,Node *head_pointer2)
{
while(head_pointer1 !=0)
{
head_union = insert_node(head_union,head_pointer1->data);
head_pointer1 = head_pointer1->next;
}
while(head_pointer2 !=0)
{
if(!compare(head_union,head_pointer2->data))
head_union = insert_node(head_union,head_pointer2->data);
head_pointer2 = head_pointer2->next;
}
return head_union;
}
int compare(Node *head,int data)
{
while (head !=NULL)
{
if (head->data == data)
return 1;
head = head->next;
}
return 0;
}
Node *get_intersection(Node *head_pointer1,Node *head_pointer2)
{
while (head_pointer1 !=0)
{
if (compare(head_pointer2, head_pointer1->data))
head_intersection = insert_node(head_intersection,head_pointer1->data);
head_pointer1 = head_pointer1->next;
}
return head_intersection;
}
int main()
{
int first_list_nodes = 0,second_list_nodes = 0,first_list_items = 0,
second_list_items = 0;
int f;
printf("Enter the number of Nodes in first List: ");
fflush(stdout);
scanf("%d",&first_list_nodes);
printf("Enter %d the elements: ",first_list_nodes);
for( f = 0;f < first_list_nodes;f++)
{
fflush(stdout);
scanf("%d",&first_list_items);
head1 = insert_node(head1,first_list_items);
}
display_list(head1);
printf("\nEnter the number of Nodes in second list:");
fflush(stdout);
scanf("%d",&second_list_nodes);
printf("Enter %d the elements: ",second_list_nodes);
for(f = 0;f< second_list_nodes;f++)
{
fflush(stdout);
scanf("%d",&second_list_items);
head2 = insert_node(head2,second_list_items);
}
display_list(head2);
res_union = get_union(head1,head2);
printf("Here is the result of union: ");
display_list(res_union);
res_intersection = get_intersection(head1,head2);
printf("Here is the result of intersection: ");
display_list(res_intersection);
}