odwołanie się do elementu listy (wskaźniki?)
Ostatnio zmodyfikowano 2015-04-18 00:13
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. 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> |
|
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. |
|
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ę: 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 : 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: struct element { int liczba; element * next; element(); };
struct lista { element * first; void uzupelnij_liste( int liczba ); void wyswietl_liste(); void przeszukiwanie(); lista(); };
|
|
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). |
|
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 :) : 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ąć ^^ |
|
« 1 » |