#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
int* array;
int size;
}Array;
//Interface
Array array_create(int init_size);
void arrar_free(Array *a);
int array_get(Array* a,int index);
void array_set(Array* a,int index,int num);
int array_size(const Array& a);
int* array_at(Array* a,int index);
void array_inflate(Array* a, int more_size);
//Main Functions
int main(void){
Array a = array_create(10);
array_set(&a,5,6);
array_set(&a,6,array_get(&a,5));
// *(array_at(&a,6))=10;
// *(array_at(&a,9))=*(array_at(&a,6));
for(int i=0;i<a.size;i++){
printf("%d ",a.array[i]);
}
return 0;
}
//Function implementation
Array array_create(int init_size){
Array a;
a.array=(int*)calloc(sizeof(int),sizeof(int)*init_size);
a.size = init_size;
return a;
}
void arrar_free(Array *a){
free(a->array);
a->size=0;
}
int array_size(const Array& a){
return a.size;
}
int* array_at(Array* a,int index){
if(index>a->size){
array_inflate(a,index-a->size);
}
return &(a->array[index]);
}
void array_inflate(Array* a, int more_size){
int* p = (int*)calloc(sizeof(int),sizeof(int)*(a->size+more_size));
memcpy((void*)p,(void*)a->array,(a->size)*sizeof(int));
for(int i=0;i<a->size;i++){
p[i] = a->array[i];
}
free(a->array);
a->array=p;
a->size=a->size+more_size;
}
int array_get(Array* a,int index){
return a->array[index];
}
void array_set(Array* a,int index,int num){
a->array[index]=num;
}
Last active
January 10, 2024 17:11
-
-
Save JackYang-hellobobo/f9b3b7b5537f231e69e8c87f4fe9dd52 to your computer and use it in GitHub Desktop.
Resizeable Array
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment