Pytanie jak zacząć, dynamiczne struktury danych.

0

Witam mam do zrobienia zadanie. (*Załącznik).

Chciałbym zapytać jak zacząć.
Nie oczekuję w żadnym wypadku gotowego rozwiązania zadania.

Tylko mam pytanie jak zaczelibyście pracę nad tym zadaniem. (Możecie sobie podarować teksty typu: "Włącz program i pisz.").
Chodzi mi tutaj o nakierowanie mnie nad czym powinienem się skupić, co będzie główną podstawą tego zadania, na czym się głównie skupić.

Mogę liczyć na taką pomoc?

Pozdrawiam.

title

1

Poczytaj o mapach. W mapie każda wartość identyfikowana jest jakimś kluczem - możesz sporządzić mapę dla list pasażerów, w której każda lista jest identyfikowana symbolem lotu. Przechodząc po danych z pliku wiersz po wierszu będziesz mógł określić (dzięki symbolowi lotu), na którą listę masz dodać danego pasażera (wyciągając ją z mapy po kluczu) i go tam dołożyć. Jest chyba nawet taka struktura w bibliotece standardowej std::multimap, która mogłaby Ci pomóc

0

Pytanie, czy Możesz użyć standardowej biblioteki, czy zaimplementować strukturę samemu?

1

Rozumiem, że:

  • nie możesz korzystać z stl containerow typu std::map, std::vector, std::list i dynamicznie allocowanych arrayów
  • masz to wyprintować gdzieś do indywidualnych plików
  1. Wczytujesz cały plik z inputem do singly linked listy Bookings, która reprezentuje wszystkie rezerwacje.
  2. Sortujesz tę listę jakimś merge sortem według typu lotu i numeru siedzenia.

Powyższy input po posortowaniu:
KR54R Katowice 2011-12-13 Matianek 02
KR54R Katowice 2011-12-13 Lopez 12
KR54R Katowice 2011-12-13 Jaworek 33
KR54R Katowice 2011-12-13 Chavez 43
TY34O London 2012-02-03 Hastings 2
TY34O London 2012-02-03 Holmes 11
TY34O London 2012-02-03 Poirot 23
TY34O London 2012-02-03 Lemon 43

Właściwie to już skończyłeś zadanie tylko wypisz to do plików. Ewentualnie:

  1. Potem (takie coś wygrzebałem, not my proudest fap xD):
/** Function iterates through sorted <b>Bookings</b> list and if current node is <u>different</u> than previous, then <b>symbol</b> of that node
is put into <b>UniqueSymbols</b> list. As a result, the <b>UniqueSymbols</b> list contains only unique values of <b>symbol</b>.
@param headBookings pointer to the first node of <b>Bookings</b>
@param headSymbol pointer to the first node of <b>Symbol</b> */
void getUniqueSymbols(Bookings* headBookings, UniqueSymbols*& headSymbols)
{
    Bookings* current = headBookings;
    if (current)
        headSymbols = new UniqueSymbols{headSymbols, current->symbol}; // create first node of UniqueSymbols
    else
        return;

    Bookings* prev = current; // save current as previous
    current = current->next; // shift next

    while (current) {
            
        /** if current node's flight symbol is different than previous node's, then add that symbol into UniqueSymbols
         *  by doing so, and because Bookings list is sorted, UniqueSymbols list ends up with only unique symbols
         *  and thus individual .txt files can be created/printed into, that is: one file for each flight symbol */
        if (current->symbol != prev->symbol) {
            headSymbols = new Target{headSymbols, current->symbol};
            current = current->next;
            prev = prev->next;
        }
        /** and if it's not different, then simply iterate further */
        else {
            current = current->next;
            prev = prev->next;
        }
    }
}

W efekcie czego masz taką listę:

KR54R
TY34O

  1. Iterujesz jednocześnie po UniqueSymbols i po Bookings tworząc przy tym pliki i printujesz posortowany już do środka content.

Anyway, cały krok 3 jest niepotrzebny.

Poćwicz listy. Dodaj error handling. Nie miej memory leaków. Sama w sobie optymalność rozwiązania nie ma znaczenia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.