zapisywanie struktur dynamicznych do pliku

0

Witajcie
Pytanie mam następujące jak zapisać np.listę jednokierunkową do pliku
a następnie ją odczytać tak by wskaznik który pokazywał na początek
teraz też pokazywał na poczatek itp.

0

Zawsze jakis wskaźnik w liście jednokierunkowej musi wskazywać na początek (zakładam, że nie jest cykliczna)- korzeń. Więc do obsługi masz zawsze drugi wskaźnik. Zapisujesz w ten sposób. Zwiększając drugi pomocniczy wskaźnik zapisujesz po kolei rekordy do pliku. W takim samym kierunku zwalniasz przydzieloną pamięć. Odczytujesz... Przeciez do pliku zapisałes je w kolejności i tak odczytujesz. No i tu są dwa sposoby tworzenia listy. Zawsze i tak wykorzystujesz dwa wskaźniki...

Jeden. Albo cały czas tworzysz nowy korzeń (pierwszy wskaźnik) i całą pozostałą listę do niego dołączasz (drugi wskaźnik).
Dwa. Albo cały czas jeden wskaźnik wskazuje na korzeń, a drugi na ostatnią gałąź. Przydzielasz pamięc tej gałęzi i przeskakujesz tym wskaźnikiem.

Ad. Jeden. Sposób do d**y, bo wczytujesz plik na odwrót, więc jesli wpadłeś przez przypadek na tak głupi pomysł, to puknij się w głowę.
Ad. Dwa. Tak cięźko samemu pomyśleć?

0

OK,tylko że nie chodzi o to ze nie znam algorytmu ale raczej o problem w implementacji, jedyne co z plikami robiłem to zapisywanie linijek tekstu, nie zabardzo wiem jak to bedzie przy strukturach dynamicznych.

Najwiekszym problemem chyba bedzie to:Jak mam już zapisaną w pliku tą liste.Po jakims czasie trzeba ja bedzie odczytac to wtedy chyba żaden wskaznik nie pokazuje na to co jest w pliku i nie <ort>zabardzo </ort>wiem <ort>w ogóle </ort>jak zacząć przenoszenie tego z powrotem do pamięci.

0

No coź, bez podstaw nie zostaniesz nawet czeladnikiem, a co dopiero mistrzem. W każdym kompilatorze od c i c++ istnieje taki plik nagłówkowy... 'stdio.h'. Proponuję poczytać w helpie na tematy: fopen(), fwrite(), fread(), fclose() i feof(). Więcej funkcji obsługi plików nie potrzebujesz, może jeszcze unlink(), żeby po sobie posprzątać. I jeszcze powinieneś poczytać na temat new i delete, ewentualnie alloc/malloc/calloc i free (głównie w stdlib.h i również w standardzie C). Powiedz mi proszę (albo lepiej nie), po co uczyłes sie obsługi listy (sam napisałeś, że algorytmy znasz), skoro nie umiesz obsłuzyć najpierw pliku? Po co chcesz obrabiać dane, skoro nie potrafisz zapisac wyniku?

0

Podstawowa sprawa - nie zapisujesz listy do pliku tylko pola z listy.

Poczytaj sobie o plikach rekordowych.

Jak wiesz jak sie tworzy listy (dodaje elementy) to przy czytaniu z pliku czytasz po tyle bajtów ile ma struktura danych zapisana w pliku (sizeof(nazwa_struktury))

Poczytaj sobie o funkcjach fread() i fwrite()

I jak już wiesz jak działają to robisz pętelke:

// "plik" jest nazwą pliku z danymi
// oczywiście na początku musisz otworzyc ten plik do odczytu
while (!eof("plik"))
{
  fread(pom, sizeof(struktura),1,"plik");
  // i teraz w zmiennej pom masz dane z pliku i podpinasz je pod liste
}
0

znowu zle mnie zrozumiałeś

Z tym new i delete nie ma dla mnie problemu,pisałem tysiące programów z listami kolejkami, zbiorami, stosami , mapami, c++ znam.
Te funkcje tez znam ale przy ich pomocy nigdy nie zapisywałem dynamicznych struktur.

Wiec inaczej <ort>sformułuje </ort>pytanie.

W jaki sposób z pliku w którym jest zapisan struktura dynamiczna

a)jak to <ort>w ogóle </ort>wtedy wyglada bo raczej to nie jest plik tekstowy
b)jak wtedy posługiwac sie wskażnikiem kiedy mam tę strukture w pliku
c)jka to wtedy wczytac do pamieci żeby struktura wyglądała jak przed zapisaniem?

Mam nadzieje że teraz jasno napisałem o co mi chodzi.......

// w_ogÓle!!!!!!

0

Marko nie zauwazyłem twojej odpowiedzi

Dzięki najprawdopodobniej tych informacji potrzebowałem.

P.S. flabra nie musisz już nic pisać

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