Operacje na strukturach

0

Witam,
Nie programuje ostatnio zbyt często w C, więc proszę o wyrozumiałość.
Chcę zrealizować wyszukiwanie pewnych struktur w plikach binarnych w opraciu o jakiś wzorzec, ale to już napisałem.
Teraz chodzi mi o to aby stworzyć tablicę struktur i każda która spełni powyższy wzorzec zostanie dodana do tablicy.
Po wyszukaniu wszystkich struktur chcę wysłać tę tablicę po gniazdach(z tym też już sobie poradziłem) i odczytać po stronie Javy.

Więc pytanie do Was. Jak zainicjalizować sensownie tablicę struktur, zaznaczam że to będzie dynamiczna tablica i potem dodawać wyszukany element(strukturę) do tej tablicy?

Dla uproszecznia:
struct KSIAZKA tablicaKsiazek = inizjalizacja;
szukaj {
jesli znaleziono {
tablicaKsiazek = dodaj znaleziona ksiazke
}
}

0
struct A {
    int x;
    int y;
};

struct A* tab;
tab = (A*)malloc(N*sizeof(A));


// jakis tam kod

free(tab);

Nie doczytalem do konca, a wiec tak:

  1. robisz liste i dodajesz tak jak tam sobie chcesz
  2. dodajesz tablice realloc() (wolne)
  3. ustalasz maksymalny rozmiar tablicy i dodajesz nastepna przy pomocy licznika.
0

Rodzajów kontenerów jest dużo, jeden z prostszych działa tak:

Tablica dynamiczna, czyli typu KSIAZKA*.
Zapamiętujesz osobno ile elementów ma tablica (ile zaalokowano pamięci) nazwijmy to capacity, oraz ile rzeczywiście elementów jest użytych (tak że pod koniec tablicy może być miejsce na trochę pustych elementów) nazwijmy to length.
Alokujesz miejsce na kilka elementów początkowych. np. 16. to jest ta wartość capacity, bo length początkowo jest 0.
Dodanie elementu polega na:

  1. sprawdzeniu czy length==capacity. jeśli tak, to alokujemy 2x większy obszar niż poprzednio, i przekopiowujemy tam wszystkie dotychczasowe elementy. (w efekcie capacity*=2, length=length).
  2. zapisaniu dodawanego elementu w pierwszy wolny indeks tablicy (tablica[length]), następnie zwiększeniu o 1 wartości length.
0

Zrobilem cos takiego: http://ideone.com/SpbxUP na szybko, na wzor vectora w c++.

0

Jeżeli nie musisz mieć dostępu wg indeksu (random access) to może ci wystarczyć lista jednokierunkowa.

0

dziękuje bardzo za obszerną pomoc.
Indeksy w tej tablicy nie są zbytnio istotne. Najważniejsze żebym potem mógł ją iterować od początku do końca i wysyłać każdy obiekt po kolei.
Pomysł z listą jednokierunkową wygląda dobrze. Chcę to też napisać jak najkrócej bo automat do komunikacji i wykonywania operacji dla Javy ma już 1,5k linii kodu.

Sprawdzę to i napiszę jak mi poszło :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1