0% found this document useful (0 votes)
3 views

Assignment_1

The document contains C code for a program that manages dynamic arrays, allowing operations such as initialization, appending, inserting, removing elements, displaying, finding maximum and minimum values, reversing, and merging arrays. It includes three files: 'Main.c' for user interaction, 'Array.c' for the implementation of array functions, and 'Array.h' for the array structure definition and function prototypes. The program utilizes dynamic memory allocation to handle array resizing and operations efficiently.

Uploaded by

ujwal56256
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Assignment_1

The document contains C code for a program that manages dynamic arrays, allowing operations such as initialization, appending, inserting, removing elements, displaying, finding maximum and minimum values, reversing, and merging arrays. It includes three files: 'Main.c' for user interaction, 'Array.c' for the implementation of array functions, and 'Array.h' for the array structure definition and function prototypes. The program utilizes dynamic memory allocation to handle array resizing and operations efficiently.

Uploaded by

ujwal56256
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 21

1. Main.

#include<stdio.h>

#include <stdlib.h>

#include <time.h>

#include "array.h"

int main(){

array arr1, arr2, arr3;

int a = 0 , n = 0, n2 = 0, value, index, max_value, min_value;

srand(time(0));

while(a != 10){

printf("1.Initialization\n");

printf("2.Appending an array\n");

printf("3.Inserting given element at an index\n");

printf("4.Removing element at a given index\n");

printf("5.Display the array\n");

printf("6.Maximum element out of the array\n");

printf("7.Minimum element out of the array\n");

printf("8.Reversing the array\n");

printf("9.Merging two arrays\n");

printf("10.Exit\n\n\n");

printf("Select the operation you want to operate\n");

scanf("%d", &a);

switch (a)

case 1:

printf("Enter number of elements in the array\n");

scanf("%d", &n);
init(&arr1, n);

printf("Entered array is\n");

display(arr1);

break;

case 2:

printf("Enter value to append in array\n");

scanf("%d", &value);

append(&arr1, value);

printf("Array after appending is\n");

display(arr1);

break;

case 3:

printf("Enter the index and element at which you want to add element\n");

scanf("%d %d", &index, &value);

insert_at_index(&arr1, index, value);

printf("New array is\n");

display(arr1);

break;

case 4:

printf("Enter the index at which element is to be removed\n");

scanf("%d", &index);

remove_at_index(&arr1, index);

printf("New array is\n");

display(arr1);

break;

case 5:

printf("Array is\n");
display(arr1);

break;

case 6:

max_value = max(&arr1, n);

printf("Maximum element of First array is %d\n", max_value);

break;

case 7:

min_value = min(&arr1, n);

printf("Minimum element of First array is %d\n", min_value);

break;

case 8:

printf("Reversed array is\n");

reverse(&arr1);

printf("\n");

break;

case 9:

printf("Enter number of elements in second array\n");

scanf("%d", &n2);

init(&arr2, n2);

merge(&arr1, &arr2, &arr3);

printf("Merged array is\n");

display(arr3);

break;

case 10:

free(arr1.A);

free(arr2.A);
free(arr3.A);

printf("Exited the program");

return 0;

break;

default:

printf("You have entered invalid operation\n");

break;

return 0;

}
2.Array.c

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include "array.h"

// actual logic for all functions

void init(array *arr, int n){

arr->A = (int*)malloc(sizeof(int)*n);

arr->size = n;

for(arr->len = 0; arr->len < n; arr->len++){

arr->A[arr->len] = rand() % 100;

void append(array *arr, int value){

if (arr->len >= arr->size) {

arr->size *= 2;

int *newArray = (int*)realloc(arr->A, sizeof(int) * arr->size);

arr->A = newArray;

arr->A[arr->len++] = value;

void insert_at_index(array *arr, int index, int value){

if(index < 0 || index > arr->len || arr->len >= arr->size){

return;

}
for (int i = arr->len; i > index; i--) {

arr->A[i] = arr->A[i - 1];

arr->A[index] = value;

arr->len++;

void remove_at_index(array *arr, int index){

if(index < 0 || index >= arr->len){

return;

for(int i = index; i < arr->len - 1; i++){

arr->A[i] = arr->A[i+1];

arr->len--;

void display(array arr){

for(int i = 0; i < arr.len; i++){

printf("%d ", arr.A[i]);

printf("\n");

return;

int max(array *arr, int size){

if(arr->len == 0){

return 0;

int max = arr->A[0];

for(int i = 0; i < arr->len; i++){


if(arr->A[i] > max){

max = arr->A[i];

return max;

int min(array *arr, int size){

if(arr->len == 0){

return 0;

int min = arr->A[0];

for(int i = 0; i < arr->len; i++){

if(arr->A[i] < min){

min = arr->A[i];

return min;

void reverse(array *arr){

for(int i = arr->len - 1; i >= 0; i--){

printf("%d ", arr->A[i]);

void merge(array *arr1, array *arr2, array *arr3){

arr3->size = arr1->len + arr2->len;

arr3->len = 0;

arr3->A = (int*) malloc(sizeof(int) * arr3->size);


for(int i = 0; i < arr1->len; i++){

arr3->A[arr3->len++] = arr1->A[i];

for(int j = 0; j < arr2->len; j++){

arr3->A[arr3->len++] = arr2->A[j];

}
3.Array.h

typedef struct array{

int *A;

int size;

int len;

}array;

// function prototyping

void init(array *arr, int size);

void append(array *arr, int value);

void insert_at_index(array *arr, int index, int value);

void remove_at_index(array *arr, int index);

void display(array arr);

int max(array *arr, int size);

int min(array *arr, int size);

void reverse(array *arr);

void merge(array *arr1, array *arr2, array *arr3);


main.c
Array.c
Array.h

You might also like