Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define INITIAL_CAPACITY 4
- typedef struct elem_s // for example purspose
- {
- int data;
- } elem_t;
- typedef struct arr_s // to define in .c file - no direct access from outside this file
- {
- elem_t** elems_arr;
- int size;
- int capacity;
- } arr_t;
- void init_arr(arr_t* arr) // private - not to declare in header file
- {
- arr->elems_arr = malloc(INITIAL_CAPACITY*sizeof(elem_t*));
- for (int i=0; i<INITIAL_CAPACITY; i++)
- {
- arr->elems_arr[i] = NULL;
- }
- arr->size = 0;
- arr->capacity = INITIAL_CAPACITY;
- }
- void increase_capacity(arr_t* arr) // private - not to declare in header file
- {
- int new_capacity = 2*arr->capacity;
- arr->elems_arr = realloc(arr->elems_arr, new_capacity*sizeof(elem_t*));
- for (int i=(arr->capacity); i<new_capacity; i++)
- {
- arr->elems_arr[i] = NULL;
- }
- arr->capacity = new_capacity;
- }
- void push(arr_t* arr, elem_t* elem)
- {
- if (arr->elems_arr == NULL)
- {
- init_arr(arr);
- }
- int* capacity_ptr = &(arr->capacity);
- int* size_ptr = &(arr->size);
- if (*size_ptr == *capacity_ptr)
- {
- increase_capacity(arr);
- }
- arr->elems_arr[*size_ptr] = elem;
- (*size_ptr)++;
- }
- void clear (arr_t* arr)
- {
- for (int i=0; i<(arr->size); i++)
- {
- if(arr->elems_arr[i] != NULL)
- {
- free(arr->elems_arr[i]);
- arr->elems_arr[i] = NULL;
- }
- }
- free(arr->elems_arr);
- }
- void print_data (const arr_t* arr) // for example pursposes
- {
- for (int i=0; i<(arr->size); i++)
- {
- printf("%d ", (arr->elems_arr[i])->data);
- }
- printf("\n");
- }
- elem_t* create_elem (int data) // for example purposes
- {
- elem_t* elem = malloc(sizeof(elem_t));
- elem->data = data;
- return elem;
- }
- int main()
- {
- arr_t* arr = malloc(sizeof(arr_t));
- elem_t* first_el = create_elem(1);
- push(arr, first_el);
- elem_t* second_el = create_elem(5);
- push(arr, second_el);
- elem_t* third_el = create_elem(3);
- push(arr, third_el);
- elem_t* fourth_el = create_elem(4);
- push(arr, fourth_el);
- elem_t* fifth_el = create_elem(6);
- push(arr, fifth_el);
- print_data(arr);
- clear(arr);
- free(arr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement