Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c++ - lista list dynamicznych na wskaźnikach

tomas_1973 28 Lip 2013 12:44 2271 4
  • #1 28 Lip 2013 12:44
    tomas_1973
    Poziom 2  

    Witam serdecznie,
    mam problem z napisaniem obsługi listy dynamicznej jednokierunkowej gdzie każdy nowy węzeł jest jednocześnie początkiem nowej innej listy dynamicznej i wypełniać ją danymi. Struktury list zamieszczam poniżej

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Nie wiem jak zrobić aby w momencie dodawania elementu TList jednocześnie można było dodawać nową liste TDane.
    Bardzo proszę o pomoc.

    0 4
  • #2 28 Lip 2013 13:08
    stanleysts
    Poziom 27  

    Ten key jest chyba w ogóle nie potrzebny.

    Tworzysz sobie normalnie listę danych (nie ważne co tam ona przechowuje) jak ona juz bedzie dzialac (dodawanie, usuwanie elementów etc...), to wtedy jej polem jest wskaźnik na tą samą listę jaką stworzyłeś, tylko, że ona ma inne pole danych. (więc to będzie tylko trochę inna struktura)

    Kod: c
    Zaloguj się, aby zobaczyć kod


    A tworzenie to mniej więcej tak:
    new main_list, new main_list->side_list, main_list->next = NULL, main_list->side_list->next = NULL, main_list->side_list->value = cokolwiek.

    No i ja bym gdzieś trzymal adres pierwszego elementow listy bo to sie przydaje do iteracji i startu wogole. Wogole jesli to c++ to bym to w klasach ladnie zrobil, można nawet po glownej liscie podziedziczyc, zeby sobie zaoszczedzic pracy.

    To tak na szybko, napewno trzeba to przeanalizowac, pozdrawiam.

    0
  • #3 28 Lip 2013 14:32
    tomas_1973
    Poziom 2  

    Dziękuje za odpowiedź.
    Mam jeszcze jedno pytanie, jak dodać kolejny element listy wewnętrznej
    side_list bez dodawania nowego elementu listy głównej main_list
    pozdrawiam

    0
  • #4 28 Lip 2013 18:23
    the_fifth_horseman
    Poziom 32  

    Cytat:
    Mam jeszcze jedno pytanie, jak dodać kolejny element listy wewnętrznej
    side_list bez dodawania nowego elementu listy głównej main_list

    Zakładając że lista to wskaźnik na strukturę TList a element to nowy element listy:
    Kod: Cpp
    Zaloguj się, aby zobaczyć kod

    Z tym że tak jak napisał stanleysts, lepszym rozwiązaniem jest zaimplementowanie listy jako klasy.
    Jeżeli nie chodzi tu o własną implementację listy (nie napisałeś czy tak czy nie), to czemu nie skorzystać z istniejących narzędzi? W tym przypadku klasa Vector jest idealnym rozwiązaniem - aby utworzyć wektor wektorów, zadeklaruj swoją listę jako vector<vector<int>> .

    0
  • #5 28 Lip 2013 20:03
    stanleysts
    Poziom 27  

    Po co tam jest operator wyłuskania ("*") przecież wystarczy samo list->nast.

    Dodajesz sobie tak, że idziesz do momentu, który cie ineresuje na liście głównej i potem tam idziesz po liście pobocznej i w miejscu które cie interesuje dodajesz. (to miejsce które cie interesuje zależy od implementacji twojej listy, wiec nei moge powiedziec co to bedzie dokladnie).
    A jak to ma być w C a nie cPP to proponuję glib-a, pozdro.

    0