bruh1214

epic

Mar 9th, 2022 (edited)
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.48 KB | None | 0 0
  1. #include "vectDynamic.h"
  2. #include <stdio.h>
  3. #include <assert.h>
  4. #include <stdlib.h>
  5. #define INIT_CAPACITY 101
  6.  
  7. VectDinamic* createVectDinamic(int cap)
  8. {
  9.     VectDinamic* v = (VectDinamic*)malloc(cap * sizeof(VectDinamic));
  10.     if (v != NULL)
  11.     {
  12.         v->elems = (Element*)malloc(cap * sizeof(Element));
  13.         v->cap = cap;
  14.         v->lg = 0;
  15.         return v;
  16.     }
  17.     else
  18.         return 0;
  19. }
  20.  
  21. void resizeVector(VectDinamic* v)
  22. {
  23.     int nCap = 2 * v->cap;
  24.     Element* nElems = (Element*)malloc(nCap * sizeof(Element));
  25.     int i;
  26.     if (nElems != NULL)
  27.     {
  28.         for (i = 0; i < v->lg; i++)
  29.         {
  30.             nElems[i] = v->elems[i];
  31.         }
  32.         free(v->elems);
  33.         v->elems = nElems;
  34.         v->cap = nCap;
  35.     }
  36. }
  37.  
  38. void addElement(VectDinamic *v, Element elem)
  39. {
  40.     if (v->lg == v->cap)
  41.     {
  42.         resizeVector(v);
  43.     }
  44.     v->elems[v->lg] = elem;
  45.     v->lg++;
  46. }
  47.  
  48. int searchElem(VectDinamic* v, Element* elem)
  49. {
  50.     int i;
  51.     int poz = 0;
  52.     for (i = 0; i < v->lg; i++)
  53.     {
  54.         poz++;
  55.         if (v->elems[i] == elem)
  56.         {
  57.             return poz;
  58.         }
  59.     }
  60.     return -1;
  61. }
  62.  
  63. int getSize(VectDinamic* v)
  64. {
  65.     return v->lg;
  66. }
  67.  
  68. int deleteElement(VectDinamic* v, Element elem)
  69. {
  70.     int pos = searchElem(v, elem);
  71.     if (pos < 0)
  72.     {
  73.         return -1;
  74.     }
  75.     for (int i = pos; i < v->lg - 1; i++)
  76.     {
  77.         if (v->elems[i] == elem)
  78.         {
  79.                 v->elems[i] = v->elems[i + 1];
  80.         }
  81.     }
  82.     v->lg--;
  83.     return 1;
  84. }
  85.  
  86. int modifyElement(VectDinamic* v, Element elem, Element new_elem)
  87. {
  88.     int i;
  89.     int pos = searchElem(v, elem);
  90.     if (pos < 0)
  91.     {
  92.         return -1;
  93.     }
  94.     else
  95.     {
  96.         for (i = 0; i < v->lg; i++)
  97.         {
  98.             if (v->elems[i] == elem)
  99.             {
  100.                 v->elems[i] = new_elem;
  101.             }
  102.         }
  103.         return pos;
  104.     }
  105. }
  106.  
  107. void destroyElems(VectDinamic* v)
  108. {
  109.     free(v->elems);
  110. }
  111.  
  112. void destroyVector(VectDinamic* v)
  113. {
  114.     destroyElems(v);
  115.     free(v);
  116. }
  117.  
  118. VectDinamic* copyVect(VectDinamic* v)
  119. {
  120.     VectDinamic* new_vect = (VectDinamic*)malloc(INIT_CAPACITY * sizeof(VectDinamic));
  121.     if (new_vect != NULL)
  122.     {
  123.         new_vect->cap = 2 * v->cap;
  124.         new_vect->lg = v->lg;
  125.         new_vect->elems = (Element*)malloc(new_vect->lg * sizeof(Element));
  126.         int i;
  127.         for (i = 0; i < new_vect->lg; i++)
  128.         {
  129.             (VectDinamic*)new_vect->elems[i] = v->elems[i];
  130.         }
  131.         return new_vect;
  132.     }
  133. }
  134.  
  135. void testVectDinamic()
  136. {
  137.     VectDinamic* v = createVectDinamic(4);
  138.     assert(getSize(v) == 0);
  139.     addElement(v, 1);
  140.     addElement(v, 2);
  141.     addElement(v, 3);
  142.     assert(getSize(v) == 3);
  143.     assert(searchElem(v, 1) == 1);
  144.     assert(searchElem(v, 2) == 2);
  145.     assert(searchElem(v, 3) == 3);
  146.     assert(searchElem(v, 4) == -1);
  147.     assert(modifyElement(v, 2, 3) == 2);
  148. }
Add Comment
Please, Sign In to add comment