Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.28 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6.  
  7. #define DEFAULT_LEN 8
  8.  
  9. struct DynArray {
  10.   int* array;
  11.   size_t capacity;
  12.   size_t length;
  13. };
  14.  
  15. struct SLNode {
  16.   double data;
  17.   struct SLNode * next;
  18. };
  19.  
  20. void vivod_dynarray(struct DynArray d)
  21. {
  22.   for (unsigned int i = 0; i < d.length; i++)
  23.   {
  24.     printf("%i ", d.array[i]);
  25.   }
  26.   puts("");
  27.   printf("capacity : %li\n", d.capacity);
  28.   printf("length : %li\n", d.length);
  29.   puts("");
  30. }
  31.  
  32. void dynarray_init(struct DynArray* d)
  33. {
  34.   if (d->array == NULL)
  35.   {
  36.     d->array = (int*)malloc(DEFAULT_LEN * sizeof(int));
  37.     if (d->array == NULL) free(d->array), exit(1);
  38.     d->capacity = DEFAULT_LEN;
  39.     d->length = 0;
  40.   }
  41.   vivod_dynarray(*d);
  42. }
  43.  
  44. void dynarray_deinit(struct DynArray* d)
  45. {
  46.   free(d->array);
  47.   d->capacity = 0;
  48.   d->length = 0;
  49. }
  50.  
  51. void dynarray_clear(struct DynArray* d)
  52. {
  53.   d->length = 0;
  54.   vivod_dynarray(*d);
  55. }
  56.  
  57. void dynarray_shrink_to_fit(struct DynArray* d)
  58. {
  59.   if (d->capacity > d->length)
  60.   {
  61.     int * new_array = (int*)realloc(d->array, d->length * sizeof(int));
  62.     if (new_array == NULL) free(d->array), exit(1);
  63.     else d->array = new_array;
  64.     d->capacity = d->length;
  65.   }
  66.   vivod_dynarray(*d);
  67. }
  68.  
  69. void dynarray_push_front(struct DynArray* d, int value)
  70. {
  71.   if (d->capacity == d->length)
  72.   {
  73.     int* new_array = (int*)realloc(d->array, (d->capacity + DEFAULT_LEN)* sizeof(int));
  74.     if (new_array == NULL) free(d->array), exit(1);
  75.     else d->array = new_array;
  76.     d->capacity += DEFAULT_LEN;
  77.   }
  78.   for (unsigned int i = 0; i < d->length;i++)
  79.   {
  80.     d->array[d->length - i] = d->array[d->length - i - 1];
  81.   }
  82.   d->length++;
  83.   d->array[0] = value;
  84.   vivod_dynarray(*d);
  85. }
  86.  
  87. void dynarray_pop_back(struct DynArray* d)
  88. {
  89.   d->length--;
  90.   vivod_dynarray(*d);
  91. }
  92.  
  93. void dynarray_main(struct DynArray* d, int value)
  94. {
  95.   dynarray_init(d);
  96.   dynarray_push_front(d, value);
  97.   dynarray_push_front(d, value + 15);
  98.   dynarray_shrink_to_fit(d);
  99.   dynarray_pop_back(d);
  100.   dynarray_clear(d);
  101.   dynarray_deinit(d);
  102.   vivod_dynarray(*d);
  103. }
  104.  
  105. void vivod_slnode(struct SLNode* d)
  106. {
  107.   struct SLNode* k = d;
  108.   while (k!= NULL)
  109.   {
  110.     printf("%f ", k->data);
  111.     k = k->next;
  112.   }
  113.   puts("");
  114. }
  115.  
  116. struct SLNode* slnode_push_back(struct SLNode* d, double value)
  117. {
  118.   if (d == NULL)
  119.   {
  120.     struct SLNode* k = (struct SLNode*)malloc(sizeof(struct SLNode));
  121.     if (k == NULL) free(d), exit(1);
  122.     d = k;
  123.     d->data = value;
  124.     d->next = NULL;
  125.   }
  126.   else
  127.   {
  128.     struct SLNode* k = d;
  129.     while (k->next != NULL)
  130.     {
  131.       k = k->next;
  132.     }
  133.     k->next = (struct SLNode*)malloc(sizeof(struct SLNode));
  134.     if (k->next == NULL) free(d), exit(1);
  135.     k->next->data = value;
  136.     k->next->next = NULL;
  137.   }
  138.   vivod_slnode(d);
  139.   return d;
  140. }
  141.  
  142. struct SLNode* slnode_push_front(struct SLNode* d, double value)
  143. {
  144.   struct SLNode* k = (struct SLNode*)malloc(sizeof(struct SLNode));
  145.   if (k == NULL) free(d), exit(1);
  146.   if (d == NULL)
  147.   {
  148.     d = k;
  149.     d->data = value;
  150.     d->next = NULL;
  151.   }
  152.   else
  153.   {
  154.     k->next = d;
  155.     k->data = value;
  156.   }
  157.   vivod_slnode(k);
  158.   return k;
  159. }
  160.  
  161.  
  162. int slnode_size(struct SLNode* d)
  163. {
  164.   int count = 0;
  165.   if (d != NULL)
  166.   {
  167.     count++;
  168.     struct SLNode* k = d;
  169.     while (k->next != NULL)
  170.     {
  171.       count++;
  172.       k = k->next;
  173.     }
  174.   }
  175.   return count;
  176. }
  177.  
  178. void slnode_clear(struct SLNode* d)
  179. {
  180.   struct SLNode* k = d;
  181.   while (k != NULL)
  182.   {
  183.     struct SLNode* next = k->next;
  184.     free(k);
  185.     k = next;
  186.   }
  187. }
  188.  
  189. int slnode_count_zero(struct SLNode* d)
  190. {
  191.   if (d == NULL) return 0;
  192.   else
  193.   {
  194.     int count = 0;
  195.     struct SLNode* k = d;
  196.     while (k != NULL)
  197.     {
  198.       if (k->data < 0.001 && k->data > -0.001) count++;
  199.       k = k->next;
  200.     }
  201.     return count;
  202.   }
  203. }
  204.  
  205. double slnode_max(struct SLNode* d)
  206. {
  207.   if (d == NULL) return NAN;
  208.   struct SLNode* k = d;
  209.   double max = k->data;
  210.   k = k->next;
  211.   while (k != NULL)
  212.   {
  213.     if (k->data > max)
  214.     {
  215.       max = k->data;
  216.     }
  217.     k = k->next;
  218.   }
  219.   return max;
  220. }
  221. void slnode_main(struct SLNode* d,int value)
  222. {
  223.   slnode_push_front(d, 0);
  224.   slnode_push_front(d, 0);
  225.   slnode_push_front(d, value);
  226.   slnode_push_back(d, value + 3.141592);
  227.   printf("size of array : %i\n", slnode_size(d));
  228.   printf("zeros in array : %i\n", slnode_count_zero(d));
  229.   printf("max el : %f\n",slnode_max(d));
  230.   slnode_clear(d);
  231. }
  232.  
  233. int main()
  234. {
  235.   char buff[DEFAULT_LEN * 4];
  236.  
  237.   struct DynArray Darr = { NULL,0,0 };
  238.   struct SLNode* Slnode = NULL;
  239.  
  240.   for (;;)
  241.   {
  242.     puts("Enter command: ");
  243.     fgets(buff, DEFAULT_LEN * 4, stdin);
  244.  
  245.     if (!strncmp(buff, "quit", 4)) break;
  246.     if (!strncmp(buff, "dynarray_init", 13)) dynarray_init(&Darr);
  247.     else if (!strncmp(buff, "dynarray_deinit", 15)) dynarray_deinit(&Darr);
  248.     else if (!strncmp(buff, "dynarray_clear", 14)) dynarray_clear(&Darr);
  249.     else if (!strncmp(buff, "dynarray_shrink_to_fit", 22)) dynarray_shrink_to_fit(&Darr);
  250.     else if (!strncmp(buff, "dynarray_push_front", 19)) dynarray_push_front(&Darr,atoi(buff + 20));
  251.     else if (!strncmp(buff, "dynarray_pop_back", 19)) dynarray_pop_back(&Darr);
  252.     else if (!strncmp(buff, "dynarray_main", 13)) dynarray_main(&Darr,atoi(buff));
  253.  
  254.     else if (!strncmp(buff, "slnode_push_front", 17)) Slnode = slnode_push_front(Slnode,atof(buff+18));
  255.     else if (!strncmp(buff, "slnode_push_back", 16)) Slnode = slnode_push_back(Slnode,atof(buff+17));
  256.     else if (!strncmp(buff, "slnode_size", 11)) slnode_size(Slnode);
  257.     else if (!strncmp(buff, "slnode_clear", 12)) slnode_clear(Slnode);
  258.     else if (!strncmp(buff, "slnode_count_zero", 17)) slnode_count_zero(Slnode);
  259.     else if (!strncmp(buff, "slnode_max", 10)) slnode_max(Slnode);
  260.     else if (!strncmp(buff, "slnode_main", 11))
  261.     {
  262.       Slnode = slnode_push_front(Slnode, 0);
  263.       Slnode = slnode_push_front(Slnode, 0);
  264.       Slnode = slnode_push_front(Slnode, atof(buff + 12));
  265.       Slnode = slnode_push_back(Slnode, atof(buff + 12) + 3.141592);
  266.       printf("size of array : %i\n", slnode_size(Slnode));
  267.       printf("zeros in array : %i\n", slnode_count_zero(Slnode));
  268.       printf("max el : %f\n", slnode_max(Slnode));
  269.       slnode_clear(Slnode);
  270.     }
  271.  
  272.     else printf("Command is invalid. \nYou've entered : %s\a\n", buff);
  273.   }
  274.   return 0;
  275. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement