Mam taką strukturkę, gdzie :
ptr- wskaznik do bloku danych w tablicy
size - liczba elementow
capacity - pojemnosc tablicy
struct array_t{
int *ptr;
int size;
int capacity;
};
Próbuje napisać funkcje, która usuwa wszystkie elementy o wartości value z tablicy a i zwraca ilosc usunietych elementow. Proces usuwania elementów ze środka tablicy nie może zmieniać kolejności jej elementów. Na puste miejsca należy przesuwać elementy o wyższym indeksie.
Jednak mi nie wychodzi
Oto mój kod:
int array_remove_item(struct array_t *a, int value)
{
if(a==NULL || a->ptr==NULL) return 1;
if(a->size<=0) return 1;
if(a->capacity<=0) return 1;
if(a->capacity>a->size) return 1;
int licznik=0;
for(int i=0;i<a->size;++i)
{
if(*(a->ptr+i)==value)
{
licznik++;
}
}
for(int i=0;i<a->size;++i)
{
if(*(a->ptr+i)==value)
{
*(a->ptr+i)=*(a->ptr+i+1);
}
}
a->size=a->size-licznik;
a->capacity=a->capacity+licznik;
a->ptr=realloc(a->ptr,a->capacity*(sizeof(int)));
return licznik;
}
Przykładowo funkcja powinna działać tak: Usunięcie 3 z tablicy 2 3 -3 3 3 20 1 da tablicę 2 -3 20 1.
Jak to naprawic?