Untitled

 avatar
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