Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,885 questions

51,811 answers

573 users

How to insert and remove the first element in dynamic array with malloc, 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, 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

*/


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