visoft

Problema 4.6 Iteratia: Merge add si get

Nov 9th, 2020
810
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 4.6
  4.  
  5. typedef struct {
  6.     int *tab;
  7.     int capacitate;
  8.     int index;
  9.     int nume;
  10. }Vector;
  11.  
  12. Vector create(){
  13.     Vector t;
  14.     t.capacitate = 2;
  15.     t.index = 0;
  16.     t.tab = (int*)malloc(sizeof(int) * t.capacitate);
  17.     return t;
  18. }
  19.  
  20. void add(Vector *t, int element){
  21.  
  22.     //caz 2, trebuie realocare
  23.     if(t->index >= t->capacitate){
  24.         // pas 1, alocam noua memorie
  25.         int capacitate_noua = t->capacitate * 2;
  26.         int * tab_nou = (int*)malloc(sizeof(int) * capacitate_noua);
  27.         // pas 2 se copiaza vechiul continut in noua locatie
  28.         for(int i = 0; i < t->capacitate; i++){  // TODO use memcpy()
  29.             tab_nou[i] = t->tab[i];
  30.         }
  31.         // pas 3, se "reseteaza" structura spre noua locatie.
  32.         t->capacitate = capacitate_noua;
  33.         free(t->tab);
  34.         t->tab = tab_nou;
  35.     }
  36.  
  37.     //Caz 1, indexul este sub capacitate
  38.     t->tab[t->index] = element;
  39.     t->index++;
  40. }
  41.  
  42. int get(Vector v, int index){
  43.     if((index < 0) || (index >= v.index)){
  44.         printf("EROARE\n");
  45.         return -1;
  46.     }
  47.     return v.tab[index];
  48. }
  49.  
  50. int main() {
  51.  
  52.     Vector  v = create();
  53.     Vector v2 = create();
  54.  
  55.     add(&v, 10);
  56.     add(&v, 20);
  57.     add(&v, 30);
  58.     add(&v, 40);
  59.  
  60.     for (int i = 0; i < v.index;i++){
  61.         printf("tab[%2d] = %d\n", i, get(v, i));
  62.     }
  63.     return 0;
  64. }
  65.  
  66.  
RAW Paste Data