Untitled
unknown
c_cpp
16 days ago
1.8 kB
5
Indexable
int licznik = 0; //tablica której celem jest przeście po tablicy for (int i = 0; i < a->size ; i++){ if(*(a->ptr+i)==value)//Szukamy elementów do usunięcia //element został znaleziony. teraz trzeba go usunąć poprzez przestawienie elementów znajdujących sie na prawo od niego o 1 w lewo kazdy for (int j = i; j < a->size-1; j++){// pętla której celem jest przechodzenie po indexach na prawo od wartości znalezionej *(a->ptr+j)=*(a->ptr+j+1);// moment w którym 'przesuwany elementy' } i--;//zmiejszamy wartosc 'i' o 1 bo szukana wartość mogła mogła sie tam pojawic w wyniku przesuwania licznik++; a->size--;// 'usunelismy'element wiec ilosc elementow w tablicy tez sie zmiejszyła o 1 } } if(a->capacity*0.25 > a->size)//jezeli po usnięciu elementow pojemność vectora podzielona przez 4 jest wieksza niz ilosc jej elementow nalezy realokowac { if(a->capacity <= 3){ a->capacity=1;// jezeli dostalismy sie do tego miejsca to zawsze cap = 1 i dalsza realokacja jest niepotrzebna (opis zadania) } else{ int* nowa = realloc(a->ptr,(a->capacity*sizeof(int))/2);// zmiejszamy rozmiar tablicy o połowe if(nowa==NULL){ return licznik; // jesli nie mozna realokowac to zwracamy ilosc usunietych elementow, nic nie zwalniamy bo nie udala sie operacja realokacji } else{ a->ptr=nowa;// udalo sie wiec przypisujemy zmiejszona pamiec do wskaznika } a->capacity/=2;// aktualizacja wlasciwosci vectora } } return licznik;// zgodnie z opisem zadania zwracamy ilosc usunietych elementow
Editor is loading...
Leave a Comment