How to insert and remove element in dynamic array with malloc and realloc and pointers in C

1 Answer

0 votes
#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, 2 , 888)) == NULL) 
        printf("Error reallocate memory\n");
    else
        arr = tmp;
    
    printf("after insert\n");
    printArray(arr, size);
    
    if ( (tmp = removeElement(arr, &size, 2) ) == 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: 7
arr[0] = 3
arr[1] = 6
arr[2] = 3
arr[3] = 10
arr[4] = 6
arr[5] = 7
arr[6] = 10
after insert
arr[0] = 3
arr[1] = 6
arr[2] = 888
arr[3] = 3
arr[4] = 10
arr[5] = 6
arr[6] = 7
arr[7] = 10
after remove
arr[0] = 3
arr[1] = 6
arr[2] = 3
arr[3] = 10
arr[4] = 6
arr[5] = 7
arr[6] = 10

*/


answered Mar 20, 2015 by avibootz
edited Mar 21, 2015 by avibootz

Related questions

...