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

Lista jednokierunkowa

Ostatnio zmodyfikowano 2013-01-16 19:41
Autor Wiadomość
rooker
Temat założony przez niniejszego użytkownika
Lista jednokierunkowa
» 2013-01-13 17:03:55
Napisalem liste ktora wczytuje liczby az do napotkania 0(proszę o sprawdzenie), wspieralem sie troche notatkami wiec chcialem zapytac co wlasciwie oznacza ta linijka kodu: aktualny->nastepny=NULL; , wiem ze to oznacza ze wskaznik bedzie pokazywal wtedy na nic, ale po co to robic?

C/C++
struct el {
    int dane;
    el * nastepny;
};

int main()
{
    el * glowa, * aktualny, * ogon;
    int n;
    glowa = NULL;
    aktualny = NULL;
   
    do {
       
        cin >> n;
        aktualny = new el;
        ogon = aktualny;
        aktualny->dane = n;
        aktualny->nastepny = NULL;
        if( ogon == NULL )
        {
            glowa = aktualny;
        }
        else
        {
            ogon->nastepny = aktualny;
        }
       
       
    } while( n != 0 );
   
   
    return 0;
}
P-73819
jsc
» 2013-01-13 17:52:56
Gdyby tak nie było to w wskaźniku byłyby śmiecie, które pokazywałyby, że następny element jest gdzieś tam, co gwarantuje katastrofę.
P-73821
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-13 18:01:25
Dobra na wstępie dodam że czytałem dużo o listach jednokierunkowych ale jest to dla mnie dość trudne więc mam problemy. Mam  napisać program, który tworzy listę dynamiczną elementów o strukturze el wczytując od użytkownika liczby całkowite dopóki nie pojawi się 0 i drukuje to listę. Zrobiłem coś takiego, ale wyskakują jakieś błędy więc proszę o pomoc.

C/C++
#include <iostream>

using namespace std;
struct el {
    int dane;
    el * nastepny;
};
el * utworzliste()
{
    el * glowa, * aktualny, * ogon;
    int n;
    glowa = NULL;
    aktualny = NULL;
    cout << "wprowadz" << endl;
    do {
        cin >> n;
        aktualny = new el;
        ogon = aktualny;
        aktualny->dane = n;
        aktualny->nastepny = NULL;
        if( ogon == NULL )
        {
            glowa = aktualny;
        }
        else
        {
            ogon->nastepny = aktualny;
        } } while( n != 0 );
   
    return glowa;
} void drukuj( el * adres )
{
   
    do {
        cout << adres->dane << " ";
        adres = adres->nastepny;
       
    } while( adres != NULL );
   
}

int main()
{
    el * glowa;
    glowa = utworzliste();
    drukuj( glowa );
   
   
    return 0;
}
P-73822
jsc
» 2013-01-13 20:05:48
A co dokładniej wyskakuje.
P-73849
Admixior
» 2013-01-13 21:06:37
uno: do ogona nie przypisujesz nulla więc zera więc:
 if( ogon == NULL )
nigdy się nie spełni
duo: przed tym warunkiem masz
aktualny = new el;
ogon = aktualny;
zastanów się nad sensem tych instrukcji i zamianą.
W skrócie w złym miejscu dałeś if i nie inicjalizowałeś zmiennej ogon
C/C++
el * utworzliste()
{
    el * glowa, * aktualny, * ogon;
    int n;
    glowa = NULL;
    aktualny = NULL;
    ogon NULL;
    cout << "wprowadz" << endl;
    do {
        cin >> n;
        aktualny = new el;
        if( glowa == NULL ) glowa = aktualny;
        else ogon->nastepny = aktualny;
       
        ogon = aktualny;
        aktualny->dane = n;
        aktualny->nastepny = NULL;
    } while( n != 0 );
   
    return glowa;
}
P-73865
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-13 23:37:50
dzięki wielkie, właśnie też mi się coś nie zgadzało, ale tak miałem gdzieś w notatkach więc wbijałem sobie do głowy że jest ok.
P-73889
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-16 17:49:05
Nie rozumiem tylko tego,że jak po if daje intrukcje w klamry i po else równieź to pojawiają się błędy o co chodzi??
P-74128
RazzorFlame
» 2013-01-16 18:34:33
Podaj kod z tym "if,else". Możesz miec coś źle a my się domyślać nie będziemy.
P-74137
« 1 » 2
  Strona 1 z 2 Następna strona