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

odwołanie się do elementu listy (wskaźniki?)

Ostatnio zmodyfikowano 2015-04-18 00:13
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
odwołanie się do elementu listy (wskaźniki?)
» 2015-04-16 19:38:15
cześć. chciałbym spytać, jak odwołać się do elementu listy ?rozumiem, że muszę przeszukiwać. Jednak, jak powiedzieć kompilatorowi: "O, ten element chcę :) Przestań przeszukiwać ;p"... To znaczy, to co napisałem to jest problem ogólny, który również chciałbym poznać :) ale w moim przypadku chciałbym "wyciągnąć" element najmniejszy i największy. W związku z faktem, że mam posegregowaną listę, to teraz chciałbym wziąć element pierwszy i ostatni z poniższego kodu. Domyślam się , że to jest teraz kwestia odwołania się do wskaźnika.

C/C++
void lista::przeszukiwanie()
{
    element * temp;
    element * maks;
    element * nowy_pocztek = NULL;
    element * pop_maks;
   
    while( first )
    {
        maks = first;
        pop_maks = NULL;
        temp = first;
       
        while( temp->next )
        {
            if( temp->next->liczba > maks->liczba )
            {
                pop_maks = temp;
                maks = temp->next;
            }
            temp = temp->next;
        }
       
        if( pop_maks )
        {
            pop_maks->next = maks->next;
        }
        else
        {
            first = maks->next;
        }
        maks->next = nowy_pocztek;
        nowy_pocztek = maks;
    }
    first = nowy_pocztek;
    cout << "Element najmniejszy listy to : " <<..........<< endl;
    cout << "Element najwiekszy listy to : " <<...........<< endl;
}

Co powinno znaleźć się w miejscu wielokropków przy cout na dole ? :( <nie polubię się chyba ze wskaźnikami ;p>
P-131005
Quirinnos
» 2015-04-16 19:55:11
Skoro masz posegregowaną, to bierzesz pierwszy i ostatni element. Nie rozumiem w czym problem. Pierwszy no to head listy, czy jak tam masz nazwany wskaźnik na początek, a ostatni... to ostatni. Przechodzisz listę do końca i masz ostatni element.
P-131008
Anim
Temat założony przez niniejszego użytkownika
» 2015-04-16 20:31:56
hm. no ok. najmniejszy element mam, faktycznie to było logiczne, first->liczba... ale do ostatniego elementu nie potrafię się tak odwołać... teoretycznie mam zgodnie z moim kodem :

cout << "Element największy listy to : " << temp->liczba << endl;

i teraz tak, gdy wypisuje posegregowaną listę:

C/C++
void lista::wyswietl_liste()
{
    element * temp = first;
   
    if( temp == 0 )
    {
        cout << "Lista jest pusta" << endl;
    }
    else
    {
        cout << "Tak. Oto one (posegregowane): " << endl;
        while( temp )
        {
            cout << temp->liczba << endl;
            temp = temp->next;
        }
        cout << "Element najmniejszy listy to : " << first->liczba << endl;
       
    }
}

to wypisze mi ładnie najmniejszy element. Kiedy dodam do tego :

C/C++
void lista::wyswietl_liste()
{
    element * temp = first;
   
    cout << endl;
    cout << "Czy w Twojej liscie znajduja sie elementy?" << endl;
   
    if( temp == 0 )
    {
        cout << "Lista jest pusta" << endl;
    }
    else
    {
        cout << "Tak. Oto one (posegregowane): " << endl;
        while( temp )
        {
            cout << temp->liczba << endl;
            temp = temp->next;
        }
        cout << "Element najmniejszy listy to : " << first->liczba << endl;
        cout << "Element najwiekszy listy to : " << temp->liczba << endl;
       
    }
}

to się wysypuje po podaniu najmniejszego elementu...dlaczego ? czy temp->liczba to nie jest mój ostatni element ?

Może podam jeszcze struktury definiujące moje listy:

C/C++
struct element
{
    int liczba;
    element * next;
    element();
};

struct lista
{
    element * first;
    void uzupelnij_liste( int liczba );
    void wyswietl_liste();
    void przeszukiwanie();
    lista();
};
P-131014
Quirinnos
» 2015-04-16 21:41:33
1) Ustawiasz wskaźnik na pierwszy element.
2) Sprawdzasz, czy ten wskaźnik wskazuje na jakieś następny element.
2.1) Jeśli nie, no to maksimum jest w tym wskaźniku.
2.2) Jeśli tak to przepinasz wskaźnik na to na co wskazuje wskaźnik :D i wracasz do 2).
P-131019
Anim
Temat założony przez niniejszego użytkownika
» 2015-04-18 00:13:30
Po pierwsze dzięki za odpowiedź... :) 3 wieczory spędziłem nad tym zadaniem... i wiecie co ? w końcu zrobiłem. I chyba w końcu zrozumiałem te listy i chyba wskaźniki ;p albo tak mi się wydaje. Ku ścisłości podaję rozwiązanie mojego problemu :) :

C/C++
void list::show_list()
{
    element * temp = first;
    if( temp == 0 )
    {
        cout << "List is empty." << endl;
        cout << "No smallest element " << endl;
        cout << "No largest element" << endl;
    }
    else
    {
        while( temp->next != 0 )
        {
            temp = temp->next;
        }
        cout << "The largest element: " << temp->number << endl;
        cout << "The smallest element: " << first->number << endl;
    }
}

To wywołanie posegregowanej funkcji i znalezienie jej elementu maksymalnego :) Fajnie się zawziąć ^^
P-131099
« 1 »
  Strona 1 z 1