Untitled
unknown
c_cpp
7 months ago
1.8 kB
6
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 elementowEditor is loading...
Leave a Comment