# Perform Set Operations on Arrays

• DSA

In this problem, we’ll be performing some basic set operations on the given arrays like Union, Intersection, and Difference. I found this problem when I was writing a practice test on ADT (Array as a Data Structure).

## Examples Set Operations

``````Array1: 2 9 21 28 35
Array2: 2 3 9 18 28

Union(A1∪A2)
2 3 9 18 21 28 35

Intersection(A1∩A2)
2 9 28

Difference(A1-A2)
21 35``````

## Union ∪

A union of two sets will contain the result of elements present in both the sets, but by their nature sets do not contain duplicates hence no repeated values.

If, A = {1,2,3} B={1,3,5} then A ∪ B = {1,2,3,5}

## Intersection ∩

As the name says, the intersection of two sets will give us the values/elements present in both the sets.

If, C = {6,8,9} C={8,9,11} then C ∩ D = {8,9}

## Difference –

The difference operation is nothing but subtraction, this usually results in the elements of first set excluding similar elements present in the other set.

If, E = {4,8,11} F={8,9,12} then E – F = {4,11}

## Program for Set Operations

I’ve written this code in C however the logic remains the same in C++, python, or any other language

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

//set operations
struct Array
{
int A[10];
int size;
int length;
};

void Display(struct Array arr)
{
int i;
printf("Elements are\n");
for (i = 0; i < arr.length; i++)
printf("%d ", arr.A[i]);
}

struct Array *Union(struct Array *arr1, struct Array *arr2)
{
int i, j, k;
i = j = k = 0;
//join both arrays
struct Array *arr3 = (struct Array *)malloc(sizeof(struct Array));
while (i < arr1->length && j < arr2->length)
{

if (arr1->A[i] < arr2->A[j])
arr3->A[k++] = arr1->A[i++];
else if (arr2->A[j] < arr1->A[i])
arr3->A[k++] = arr2->A[j++];
else
{
arr3->A[k++] = arr1->A[i++];
j++;
}
}
for (; i < arr1->length; i++)
arr3->A[k++] = arr1->A[i];
for (; j < arr2->length; j++)
arr3->A[k++] = arr2->A[j];
arr3->length = k;
arr3->size = 10;
return arr3;
}

struct Array *Intersection(struct Array *arr1, struct Array *arr2)
{
int i, j, k;
i = j = k = 0;
//add if  both are same, present in both
struct Array *arr3 = (struct Array *)malloc(sizeof(struct Array));
while (i < arr1->length && j < arr2->length)
{
if (arr1->A[i] < arr2->A[j])
i++;
else if (arr2->A[j] < arr1->A[i])
j++;
else if (arr1->A[i] == arr2->A[j])
{
arr3->A[k++] = arr1->A[i++];
j++;
}
}
arr3->length = k;
arr3->size = 10;
return arr3;
}

struct Array *Difference(struct Array *arr1, struct Array *arr2)
{
int i, j, k;
i = j = k = 0;
//a-b=c
struct Array *arr3 = (struct Array *)malloc(sizeof(struct Array));
while (i < arr1->length && j < arr2->length)
{
//if a<b then a is already crossed or not present hence add it
if (arr1->A[i] < arr2->A[j])
arr3->A[k++] = arr1->A[i++];
else if (arr2->A[j] < arr1->A[i])
j++;
else
{
i++;
j++;
}
}
for (; i < arr1->length; i++)
arr3->A[k++] = arr1->A[i];
arr3->length = k;
arr3->size = 10;
return arr3;
}

int main()
{
struct Array arr1 = {{2, 9, 21, 28, 35}, 10, 5};
struct Array arr2 = {{2, 3, 9, 18, 28}, 10, 5};
Display(arr1);
Display(arr2);
struct Array *arr3;
arr3 = Union(&arr1, &arr2);
Display(*arr3);
arr3 = Intersection(&arr1, &arr2);
Display(*arr3);
arr3 = Difference(&arr1, &arr2);
Display(*arr3);
return 0;
}``````

## Conclusion

This post [Performing Set Operations on Arrays] is a part of my #30DaysChallenge to write a blog post every day on what I learn daily, All the Best~ Abhiram Reddy.