Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* darray.c - dynamic array
- *
- * 2014, gmb */
- #include <stdio.h>
- #include <stdlib.h>
- int *darr;
- unsigned int size = 0;
- int darr_init(int *darr){
- *darr = (int *) malloc(sizeof(int));
- if(darr == NULL)
- return -1;
- else
- return 0;
- }
- void darr_del(int *darr){
- free(darr);
- }
- int darr_add(int *darr, int element){
- unsigned int i;
- int *tmp = (int *) malloc(sizeof(int) * size);
- if(tmp == NULL)
- return -1;
- for(i = 0; i < size; i++){
- *(tmp + i) = *(darr + i);
- }
- free(darr);
- *darr = (int *) malloc(sizeof(int) * (size + 1));
- if(darr == NULL)
- return -2;
- for(i = 0; i < size; i++){
- *(darr + i) = *(tmp + i);
- }
- *(darr + size) = element;
- size++;
- free(tmp);
- return 0;
- }
- int darr_get(int *darr, unsigned int i){
- return *(darr + i);
- }
- int darr_rem(int *darr, unsigned int i){
- unsigned int j, k = 0;
- if(i >= size)
- return -1;
- int *tmp = (int *) malloc(sizeof(int) * (size - 1));
- if(tmp == NULL)
- return -1;
- for(j = 0; j < size; j++){
- if(j != i){
- *(tmp + k) = *(darr + j);
- k++;
- }
- }
- free(darr);
- *darr = (int *) malloc(sizeof(int) * (size - 1));
- if(darr == NULL)
- return -2;
- for(j = 0; j < (size - 1); j++){
- *(darr + j) = *(tmp + j);
- }
- size--;
- free(tmp);
- return 0;
- }
- void darr_print(int *darr){
- unsigned int i;
- for(i = 0; i < size; i++){
- printf("%d ", *(darr + i));
- }
- }
- int main(){
- int err = 0;
- unsigned int i = 0;
- if((err = darr_init(&darr)) < 0){
- fprintf(stderr, "darr_init() failed");
- exit(1);
- }
- if((err = darr_add(&darr, 1)) < 0){
- fprintf(stderr, "darr_add() failed");
- exit(2);
- }
- if((err = darr_add(&darr, 2)) < 0){
- fprintf(stderr, "darr_add() failed");
- exit(2);
- }
- printf("darray: ");
- darr_print(&darr);
- printf("\n");
- if((err = darr_add(&darr, 3)) < 0){
- fprintf(stderr, "darr_add() failed");
- exit(2);
- }
- printf("after add: ");
- for(i = 0; i < size; i++){
- printf("%d ", darr_get(&darr, i));
- }
- printf("\n");
- if((err = darr_rem(&darr, 1)) < 0){
- fprintf(stderr, "darr_rem() failed");
- exit(3);
- }
- printf("after remove: ");
- darr_print(&darr);
- darr_del(&darr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment