As you can see in the code I am trying to print the items for the array by calling the viewArray
function but it is not printing after the call. I tried to double the capacity of the array by using the doubleArray
function and I also tried to halve the size of the Array using halfArray
function.
#include<stdio.h>
#include<stdlib.h>
struct DynamicArray
{
int capacity;
int lastIndex;
int *ptr;
};
struct DynamicArray *createArray(int cap)
{
struct DynamicArray *arr;
arr=(struct DynamicArray*)malloc(sizeof(struct DynamicArray));
arr->ptr=(int*)malloc(sizeof(int)*cap);
arr->capacity=cap;
arr->lastIndex=-1;
return arr;
};
// Function to double the capacity of array
void doubleArray(struct DynamicArray *arr)
{
int *temp;
temp=(int*)malloc(sizeof(int)*arr->capacity*2);
for(int i=0; i<=arr->lastIndex; i++)
temp[i]=arr->ptr[i];
free(arr->ptr);
arr->ptr=temp;
arr->capacity*=2;
}
// Function to half the size of an Array
void halfArray(struct DynamicArray *arr)
{
int *temp;
temp=(int*)malloc(sizeof(int)*arr->capacity/2);
for(int i=0; i<=arr->lastIndex; i++)
temp[i]=arr->ptr[i];
free(arr->ptr);
arr->ptr=temp;
arr->capacity/=2;
}
//Function to append an element in Array
void append(struct DynamicArray *arr,int data)
{
if(arr->lastIndex+1>arr->capacity)
{
doubleArray(arr);
}
arr->ptr[arr->lastIndex+1]=data;
arr->lastIndex+=1;
}
// Function to insert an element in array
void insert(struct DynamicArray *arr,int pos,int data)
{
if(pos<0 || pos>arr->lastIndex+1)
{
printf("\nInvalid Index!!\n");
}
else
{
if(arr->lastIndex+1>arr->capacity)
{
doubleArray(arr);
}
for(int i=arr->lastIndex; i>=pos; i--)
{
arr->ptr[i+1]=arr->ptr[i];
}
arr->ptr[pos]=data;
arr->lastIndex+=1;
}
// Function to delete an element from an array
void delete(struct DynamicArray *arr,int pos)
{
if(pos<0 || pos>arr->lastIndex+1)
{
printf("\nInvalid Index\n");
}
else
{
if(count(arr)<=arr->capacity/2)
{
halfArray(arr);
}
for(int i=pos; i<arr->lastIndex; i++)
{
arr->ptr[i]=arr->ptr[i+1];
}
arr->lastIndex-=1;
}
// Function to print the Array elements
void viewArray(struct DynamicArray *arr)
{
for(int i=0; i<=arr->lastIndex; i++)
{
printf("\n%d\t",arr->ptr[i]);
}
}
int main()
{
int choice;
struct DynamicArray *arr;
while(1)
{
printf("1:- Create an Array\n");
printf("2:- Append an Element in an Array\n");
printf("3:- Insert an Element in an Array\n");
printf("4:- Delete an Element in an Array\n");
printf("5:- View Array\n");
printf("\nEnter your Choice:-\t");
scanf("%d",&choice);
switch(choice)
{
case 1:
arr=createArray(10);
printf("\nArray Created successfully!!\n\n");
break;
case 2:
append(arr,99);
append(arr,45);
append(arr,67);
append(arr,21);
append(arr,32);
printf("\nElement append successfully!!\n\n");
break;
case 3:
insert(arr,2,89);
break;
case 4:
delete(arr,2);
printf("\nElement deleted successfully!!\n\n");
break;
case 5:
viewArray(arr);
break;
}
}
return 0;
}