#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct
{
int *data;
size_t length;
size_t capacity;
} Dynamic_Array;
void init(Dynamic_Array * dynamic_array, size_t capacity)
{
dynamic_array->length = 0;
dynamic_array->capacity = capacity;
dynamic_array->data = (int *)malloc(capacity * sizeof(int));
}
void resize(Dynamic_Array *dynamic_array, size_t newcapacity)
{
dynamic_array->data = (int *)realloc(dynamic_array->data, newcapacity * sizeof(int));
dynamic_array->capacity = newcapacity;
}
void destroy_array(Dynamic_Array *dynamic_array)
{
free(dynamic_array->data);
dynamic_array->data = NULL;
dynamic_array->length = 0;
dynamic_array->capacity = 0;
}
int get_length(Dynamic_Array *dynamic_array)
{
return dynamic_array->length;
}
void insert_array(Dynamic_Array *dynamic_array, int index, int element)
{
if (index > dynamic_array->length)
{
return;
}
if (dynamic_array->capacity == dynamic_array->length)
{
resize(dynamic_array, dynamic_array->capacity * 2);
}
for (int i = dynamic_array->length; i > index; i--)
{
dynamic_array->data[i] = dynamic_array->data[i - 1];
}
dynamic_array->data[index] = element;
dynamic_array->length++;
}
bool insert_end(Dynamic_Array *dynamic_array, int index,int element)
{
if (index > dynamic_array->length)
{
return false;
}
insert_array(dynamic_array, index,element);
return true;
}
bool delete_at(Dynamic_Array *dynamic_array, int index, int * delect_element)
{
if (index >= dynamic_array->length)
{
return false;
}
*delect_element = dynamic_array->data[index];
for (int i = index; i < dynamic_array->length - 1; i++)
{
dynamic_array->data[i] = dynamic_array->data[i + 1];
}
dynamic_array->length++;
return true;
}
bool delect_end(Dynamic_Array *dynamic_array, int index, int* delect_element)
{
if (index >= dynamic_array->length)
{
return false;
}
delete_at(dynamic_array, index, delect_element);
return true;
}
void arr_printf(Dynamic_Array *dynamic_array){
if (dynamic_array->length == 0)
{
return;
}
for (size_t i = 0; i < dynamic_array->length; i++)
{
printf("%d\n",dynamic_array->data[i]);
}
}
int main()
{
Dynamic_Array dynamic_array;
size_t capacity = 6L;
init(&dynamic_array,capacity);
for (size_t i = 0; i < dynamic_array.capacity; i++)
{
insert_array(&dynamic_array,0,i + 10);
}
arr_printf(&dynamic_array);
return 0;
}