Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

listy jednokierunkowe

Ostatnio zmodyfikowano 2015-07-07 00:06
Autor Wiadomość
heroarthur
Temat założony przez niniejszego użytkownika
listy jednokierunkowe
» 2015-07-06 23:30:40
Witajcie, robie zwykłą liste jednokierunkową (tą co ma człon informacyjny ze wskaznikami ogon, glowa oraz elementy gdzie kazdy zawiera wartosc i wsaznik na następny element)

mam w niej funkcje dorzuc_1 ktora dodaje zwyczajnie jeden element i funkcje wypisz (obie kolejno ponizej) ktore ladnie dzialaja i wypisuja poprawnie zawartosc listy, natomiast gdy zamiast dorzuc_1 uzyje innego jej odpowiednika (listing na samym dole) to w funkcji wypisz sie zapętla i wypisuje cały czas ostatni elemement


C/C++
void LISTA::dorzuc_1( int x ) {
   
    ELEMENT * q = new ELEMENT;
    q->nastepny = NULL;
    q->wartosc = x;
   
   
    if( inf.glowa == NULL ) {
       
        inf.glowa = q;
        inf.ogon = q;
    }
   
    else {
       
        ( inf.ogon )->nastepny = q;
        ( inf.ogon ) = q;
       
    }
   
}


void LISTA::wypisz_zawartosc() {
    ELEMENT * q = new ELEMENT;
    q = inf.glowa;
   
    while( q != NULL ) {
       
        cout << q->wartosc << "   ";
       
        q = q->nastepny;
    }
}




tutaj ten odpowiednik wspomniany, postanowilem w nim nie przydzielac dynamicznie pamieci tylko zrobic to inaczej, uzywajac znaczkow & (czyli wyluskujac adres) i dla czego to nie dziala poprawnie? proszę o jakąś wypowiedź odnośnie tego co źle robie ze wskaźnikami, jak to jest z tymi listami, o czym zapomniałem itd

C/C++
void LISTA::dorzuc_1( int x ) {
    ELEMENT q;
    q.nastepny = NULL;
    q.wartosc = x;
   
   
    if( inf.glowa == NULL ) {
        inf.glowa = & q;
        inf.ogon = & q;
    }
   
    else {
        ( inf.ogon )->nastepny = & q;
        ( inf.ogon ) = & q;
    }
   
   
}

[ cpp ]
P-134404
pekfos
» 2015-07-06 23:45:34
dla czego to nie dziala poprawnie?
A jak myślisz? Cała lista to powiązany ze sobą jeden element, który nie istnieje poza dorzuc_1().

C/C++
ELEMENT * q = new ELEMENT;
q = inf.glowa;
Nie rozumiesz swojego kodu.
P-134405
heroarthur
Temat założony przez niniejszego użytkownika
RE:pekfos
» 2015-07-06 23:58:08
aha, czyli chodzi o to że robiąc ELEMENT *q = new ELEMENT; rezerwuje miejsce w pamięci, a jak robie tylko Element q; to ona jest zmienną lokalną i po wyjsciu z funkcji dorzuc_1 pamiec jego jest zwalniana zatem z listy juz nie mozna potem sie do niego odwolać? A to z tym nie rozumiesz własne... to chodziło o to że rezerwuje pamięc pod wskaznik q , a potem q ustawiam na ja jakies inne pole pamięci czyli bez sensu jakby?
P-134406
pekfos
» 2015-07-07 00:03:26
Tak. Tak, bez sensu.
P-134407
heroarthur
Temat założony przez niniejszego użytkownika
dzięki
» 2015-07-07 00:06:43
dzięki za celną i lakoniczną odpowiedź xd, to chyba zamkne temat
P-134408
« 1 »
  Strona 1 z 1