#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int *allocateArray(int *arr, int size);
void setRandomNumbers(int *arr, int size);
void printArray(int *arr, int size);
int *insertElement(int *arr, int *size, int index, int value);
int *removeElement(int *arr, int *size, int index);
int main(void)
{
int *arr = NULL, *tmp, size;
printf("Enter array size: ");
scanf("%d", &size);
if ( (arr = allocateArray(arr, size)) == NULL)
{
printf("Error allocating memory\n");
return 1;
}
setRandomNumbers(arr, size);
printArray(arr, size);
if ( (tmp = insertElement(arr, &size, 0 , 999)) == NULL)
printf("Error reallocate memory\n");
else
arr = tmp;
printf("after insert\n");
printArray(arr, size);
if ( (tmp = removeElement(arr, &size, 0) ) == NULL)
printf("Error reallocate memory\n");
else
arr = tmp;
printf("after remove\n");
printArray(arr, size);
free(arr);
return 0;
}
int *allocateArray(int *arr, int size)
{
arr = malloc(size * sizeof(int));
return arr;
}
void setRandomNumbers(int *arr, int size)
{
int i;
srand(time(NULL));
for (i = 0; i < size; i++)
arr[i] = rand() % 10 + 1;
}
void printArray(int *arr, int size)
{
int i;
for (i = 0; i < size; i++)
printf("arr[%d] = %d\n", i, arr[i]);
}
int *insertElement(int *arr, int *size, int index, int value)
{
int *tmp, i;
tmp = realloc(arr, (*size + 1) * sizeof(int));
if (tmp != NULL)
{
arr = tmp;
(*size)++;
}
else
{
free(tmp);
return NULL;
}
for (i = (*size - 1); i > index; i--)
arr[i] = arr[i - 1];
arr[index] = value;
return arr;
}
int *removeElement(int *arr, int *size, int index)
{
int *tmp, i, last_number = arr[(*size - 1)];
tmp = realloc(arr, (*size - 1) * sizeof(int));
if (tmp != NULL)
{
arr = tmp;
(*size)--;
}
else
{
free(tmp);
return NULL;
}
for (i = index; i < (*size - 1); i++)
arr[i] = arr[i + 1];
if (index != *size) arr[(*size - 1)] = last_number;
return arr;
}
/*
run:
Enter array size: 5
arr[0] = 8
arr[1] = 2
arr[2] = 10
arr[3] = 10
arr[4] = 10
after insert
arr[0] = 999
arr[1] = 8
arr[2] = 2
arr[3] = 10
arr[4] = 10
arr[5] = 10
after remove
arr[0] = 8
arr[1] = 2
arr[2] = 10
arr[3] = 10
arr[4] = 10
*/