[cpp] - segregowanie bazy danych

0

Witam!

Czy ktoś ma może pomysł jak można uniknąć pustych rekordów w "pseudo"bazie danych? Chodzi mi o coś takiego. Mam tablicę 100 struktur. W każdej są jakieś dane. Napisałem funkcję, która umożliwia kasowanie dowolnego rekordu. I teraz nie mam pomysłu na algorytm eliminujący te "liki" między danymi. Obrazowo przedstawię to tak (po skasowaniu dowolnego rekordu):

0: dane
1: inne dane
2: ............
3: kolejny rekord
4:............
5: ..........
6: koniec

A chciałbym, żeby wyglądało tak:

0: dane
1: inne dane
2: kolejny rekord
3: koniec

Ma ktoś jakąś koncepcję?

Z góry dziękuję.

0

zamiast tablicy zastosuj listę (jedno lub dwukierunkową) a wtedy czyszczenie rekordów (danych) polegać będzie tylko na zmiani wartości wskazników :)

0

Oj nie chcialbym widziec takiej listy w dzialaniu. Jak myslisz co sie dzieje z danymi na ktore wskazywal przed zmiana wartosci wskaznik ? ;)

0

Problem w tym, że muszę używać tablic(taki jest wymóg ćwiczenia, które wykonuję) i nie chodzi mi o czyszczenie bazy danych, tylko o likwidację tzw. "luk" pomiędzy danymi.

0

Nie potrzeba tutaj przeciez wiele myslenia. Ciekaw jestem jak rozwiazales inne problem ;P
W petli przepisujesz o jedna pozycje w dol wszystkie wpisy poczawszy od pustego wpisu.
Jesli usuwasz nr2 to:
nr2<-nr3<-nr4<-...<-ostatni_nr
ostatni_nr zerujesz

Poczytaj lepiej o pętlach bo to podstawa.

0

Nie jestem taki zielony z programowania :-). Po prostu jestem chory i nie za dobrze mi się myśli ;P . Dotychczas programowałem w Visual Basicu 6.0(http://www.michmajsoftware.prv.pl --->moja strona domowa), trochę w Turbo Pascalu. Zdaję sobie jednak sprawę, że nie ma co porównywać C++ do VB. Dlatego (a również z powodu, że zaczęło się omawianie tego języka na zajęciach) postanowiłem nauczyć się pisać w C++. Z resztą problemów udało mi się poradzić. Z pętlami w C++ zapoznałem się na samym początku -->trudno bez nich napisać jakiś trudniejszy program...

Wracając do tematu: chciałbym napisać funkcję realizującą to zadanie, a nie za każdym razem przesuwać niejako "ręcznie" wpisy.

0

No to jak? Skoro nie chcesz robic tego za kazdym razem "recznie" to kod wstaw do funkcji ktorej zasieg bedzie obejmowal miejsce jej wywolania.

void nazwa_funkcji(typ_tablicy *tab)
{
//cialo funkcji
}

Potem ja wywolujesz

[green]

0

Zrób sobie drugi plik temp do niego kopiuj swój plik bazy danych ale kopiuj linika po linice bez kopiowania pustych lini a później zpowrotem do pliku bazy danych i juz nie ma pustych wpisów.
Użyj if'a żeby nie kopiować pustych lini.

</cpp>
0

Dziękuję za pomoc. Napisałem funckję, działającą na trochę innej zasadzie. Zapamiętuje ona miejsce usunięcia wpisu i końca bazy, a potem w pętli for przenosi kolejne wpisy w dół.

Pozdrawiam.

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