#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct{
int *data,size,length;
} Arr;
Arr *init(int n){
Arr *res=(Arr *)calloc(1,sizeof(Arr));
res->data=(int *)calloc(n,sizeof(int));
res->size=n;
res->length=0;
return res;
}
void clear(Arr *arr){
if(arr == NULL) return ;
if(arr->data) free(arr->data);
free(arr);
}
int exten(Arr *arr){
int ex_size=arr->size;
int *temp=NULL;
while(ex_size){
temp=(int *)realloc(arr->data,(arr->size + ex_size)*sizeof(int));
if(temp) break;
ex_size>>=1;
}
if(temp == NULL) return 0;
arr->data=temp;
arr->size+=ex_size;
return 1;
}
int insert(Arr *arr,int val,int index){
if(arr == NULL) return 0;
if(index<0 || index > arr->length) return 0;
if(arr->length == arr->size && !exten(arr)) return 0;
for(int i=arr->length; i>index; --i){
arr->data[i]=arr->data[i-1];
}
arr->data[index]=val;
++arr->lenth;
return 1;
}
int erase(Arr *arr, int index){
if(arr == NULL) return 0;
if(index<0 || index>=arr->length) return 0;
for(int i=index+1; i<arr->length; ++i){
arr->data[i-1]=arr->data[i];
}
--arr->length;
return 1;
}
void output(Arr *arr){
printf("[");
for(int i=0; i < arr->length; ++i){
printf("%d",arr->data[i]);
i < arr->length-1 && printf(" ");
}
printf("]\n");
}
int main(){
srand(time(0));
Arr *arr=init(1);
for(int i=0; i<20; ++i){
int val=rand() % 100;
int ind=rand() % (arr->length+5) -2;
int ope=rand() % 4;
switch(ope){
case 0:
case 1:
case 2:
insert(arr,val,ind);
break;
case 3:
erase(arr,ind);
break;
}
output(arr);
}
clear(arr);
return 0;
}