Project 1 - Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory) using Linked List
Objective:Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory) using Linked List
Goals:
- 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.
list.c
#include "list.h"
void display_list(Node *head_ref)
{
if(head_ref == 0)//if statement if user does not enters any number it will show the message list is empty//
{
printf("list is empty");
}
else
{
tail=head_ref;
while(tail !=0)
{
printf("%d",tail->data); //print the data of current node//
tail=tail->next; //advances the position of current node//
}
tail=newnode;
#ifdef DEBUG
printf("value of tail is :%d\n",tail);
#endif
}
}
Node *insert_node(Node *head_ref,int n)
{
printf("\ninserting elements at the beginning....\n");//insert the message to the user//
newnode=(Node*)malloc(sizeof(Node));
printf("address of created newnode:%d \n",newnode);//display the address of the first items//
newnode->data = n;
printf("inserted value is:%d\n", newnode->data);//display the values of the lisy 1 item//
newnode->next=head_ref;
head_ref=newnode;
#ifdef DEBUG
printf("head address:%d",head_ref);
printf("new node address:%d",newnode);
printf("existing insert function\n");
#endif
return head_ref;
}
Node *get_union(Node *head_pointer1, Node *head_pointer2)
{
while(head_pointer1 !=0)//check whether the head pointer not equal to 0//
{
head_union=insert_node(head_union,head_pointer1->data);
head_pointer1=head_pointer1->next;
}
while(head_pointer2 !=0)
{
if (!compare(head_pointer2, 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; //the head less than next data//
}
return 0;
}
Node *get_intersection(Node *head_pointer1,Node*head_pointer2)//get the intersection output of the both//
{
while(head_pointer1 !=0)//check whether the head pointer is not equal to 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;
}
list.h
#ifndef LIST_H_
#define LIST_H_
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
/*....define the node....*/
typedef struct node
{
int data;
struct node *next;
}Node;//user define data typedef declaration data and node//
static Node *head1,*head2,*head_union,*head_intersection,*newnode,*tail,*res_union,*res_intersection;//static variable declaration//
/*....define the function...*/
Node *insert_node(Node *head_ref,int n);//head ref data//
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);//compare the values of both the list//
#endif /* LIST_H_ */
project1.c
#include "list.h" //header//
int main() //main function//
{
int first_list_node=0,second_list_node=0,first_list_item=0,second_list_item=0;//local variable declaration//
printf("\n enter no of nodes in first list:");//displayed the message to the user to enter the first list//
//asked to user how many numbers in list he is going to enter//
fflush(stdout);
scanf("%d",&first_list_node);//read the list items of first list//
printf("\n enter %d the elements:",first_list_node);
int i;
for (i=0;i<first_list_node;i++) //for loop for the scanning different values//
{
fflush(stdout);//cleared cache memory//
scanf("%d",&first_list_item); //read the first list item//
head1=insert_node(head1,first_list_item);
}
display_list(head1);//display list head 1//
printf("\n enter no of nodes in second list:");//asked the user to enter the second list//
fflush(stdout);//cleared cache memory//
scanf("%d",&second_list_node);//read the list items of second list//
printf("\n enter %d the elements:",second_list_node);
for (i=0;i<second_list_node;i++)//for loop to scan the second list//
{
fflush(stdout);//cleared cache memory//
scanf("%d",&second_list_item); //read the second list item//
head2=insert_node(head2,second_list_item);
}
display_list(head2);//display list head 2
res_union=get_union(head1,head2);
#ifdef DEBUG MAIN
printf("\nvalue of head1 and head2:%d%d",head1,head2);
#endif
#ifdef DEBUG MAIN
printf("\nvalue of head1 and head2 after performing union:%d%d\n",head1,head2);
printf("\nvalue of res_union:%d%\n",res_union);
#endif
printf("here is the result of union:");
display_list(res_union);
res_intersection=get_intersection(head1,head2);//re-enter the section ofhead 1 and head2//
#ifdef DEBUG MAIN
printf("\nvalue of head1 and head2 after performing intersection:%d%d\n",head1,head2);
printf("\nvalue of res_intersection:%d%\n",res_intersection);
#endif
printf("\nhere is the result of intersection:");//display the message to the user result of intersection before displaying the output//
display_list(res_intersection);// call the intersection to compare list//
}
OUTPUT:

