g0mb4

darray

Oct 31st, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.53 KB | None | 0 0
  1. /* darray.c - dynamic array
  2.  *
  3.  * 2014, gmb */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8.  
  9. int *darr;
  10. unsigned int size = 0;
  11.  
  12. int darr_init(int *darr){
  13.  
  14.     *darr = (int *) malloc(sizeof(int));
  15.  
  16.     if(darr == NULL)
  17.         return -1;
  18.     else
  19.         return 0;
  20. }
  21.  
  22. void darr_del(int *darr){
  23.     free(darr);
  24. }
  25.  
  26. int darr_add(int *darr, int element){
  27.     unsigned int i;
  28.  
  29.     int *tmp = (int *) malloc(sizeof(int) * size);
  30.  
  31.     if(tmp == NULL)
  32.         return -1;
  33.  
  34.     for(i = 0; i < size; i++){
  35.         *(tmp + i) = *(darr + i);
  36.     }
  37.  
  38.     free(darr);
  39.     *darr = (int *) malloc(sizeof(int) * (size + 1));
  40.  
  41.     if(darr == NULL)
  42.         return -2;
  43.  
  44.     for(i = 0; i < size; i++){
  45.         *(darr + i) = *(tmp + i);
  46.     }
  47.  
  48.     *(darr + size) = element;
  49.     size++;
  50.  
  51.     free(tmp);
  52.  
  53.     return 0;
  54. }
  55.  
  56. int darr_get(int *darr, unsigned int i){
  57.     return *(darr + i);
  58. }
  59.  
  60. int darr_rem(int *darr, unsigned int i){
  61.     unsigned int j, k = 0;
  62.  
  63.     if(i >= size)
  64.         return -1;
  65.  
  66.     int *tmp = (int *) malloc(sizeof(int) * (size - 1));
  67.  
  68.     if(tmp == NULL)
  69.         return -1;
  70.  
  71.     for(j = 0; j < size; j++){
  72.         if(j != i){
  73.             *(tmp + k) = *(darr + j);
  74.             k++;
  75.         }
  76.     }
  77.  
  78.     free(darr);
  79.     *darr = (int *) malloc(sizeof(int) * (size - 1));
  80.  
  81.     if(darr == NULL)
  82.         return -2;
  83.  
  84.     for(j = 0; j < (size - 1); j++){
  85.         *(darr + j) = *(tmp + j);
  86.     }
  87.  
  88.     size--;
  89.  
  90.     free(tmp);
  91.  
  92.     return 0;
  93. }
  94.  
  95. void darr_print(int *darr){
  96.  
  97.     unsigned int i;
  98.  
  99.     for(i = 0; i < size; i++){
  100.         printf("%d ", *(darr + i));
  101.     }
  102. }
  103.  
  104. int main(){
  105.  
  106.     int err = 0;
  107.     unsigned int i = 0;
  108.  
  109.     if((err = darr_init(&darr)) < 0){
  110.         fprintf(stderr, "darr_init() failed");
  111.         exit(1);
  112.     }
  113.  
  114.     if((err = darr_add(&darr, 1)) < 0){
  115.         fprintf(stderr, "darr_add() failed");
  116.         exit(2);
  117.     }
  118.  
  119.      if((err = darr_add(&darr, 2)) < 0){
  120.         fprintf(stderr, "darr_add() failed");
  121.         exit(2);
  122.     }
  123.  
  124.     printf("darray: ");
  125.  
  126.     darr_print(&darr);
  127.  
  128.     printf("\n");
  129.  
  130.     if((err = darr_add(&darr, 3)) < 0){
  131.         fprintf(stderr, "darr_add() failed");
  132.         exit(2);
  133.     }
  134.  
  135.     printf("after add: ");
  136.  
  137.     for(i = 0; i < size; i++){
  138.         printf("%d ", darr_get(&darr, i));
  139.     }
  140.  
  141.     printf("\n");
  142.  
  143.     if((err = darr_rem(&darr, 1)) < 0){
  144.         fprintf(stderr, "darr_rem() failed");
  145.         exit(3);
  146.     }
  147.  
  148.     printf("after remove: ");
  149.     darr_print(&darr);
  150.  
  151.     darr_del(&darr);
  152.  
  153.     return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment