pysiek.1996 Temat założony przez niniejszego użytkownika |
Listy » 2017-11-27 09:52:02 Witam serdecznie. Mam napisany kod usuwania z listy jednak wywala on kombilator. void ListaZatrudnionych::Usun( const Pracownik & wzorzec ) { Pracownik * temp = new Pracownik, * pierwszy = new Pracownik; * temp = wzorzec; pierwszy = m_pPierwszy; if( pierwszy == NULL ) cout << "PROBLEM, PUSTO TU"; else { while( pierwszy != temp ) { pierwszy = pierwszy->m_nast � pny; } pierwszy = pierwszy->m_nast � pny; } }
Mam tez napisaną funkcję dodawania do listy na koniec. Wie ktoś jak to zmienić żeby dodawało alfabetycznie ? void ListaZatrudnionych::DodajNaKoniec( const Pracownik & p ) { Pracownik * nowy = new Pracownik; * nowy = p; if( m_pPierwszy == NULL ) { m_pPierwszy = nowy; } else { Pracownik * temp = m_pPierwszy; while( temp->m_nast � pny != NULL ) { temp = temp->m_nast � pny; } temp->m_nast � pny = nowy; nowy->m_nast � pny = NULL; } }
|
|
Anim |
» 2017-11-27 10:25:39 Strasznie dziwnie opisany problem ;p
W pierwszym przypadku podaj komunikat kompilatora (może po prostu błąd wynika z faktu, że używasz polskich znaków ?).
W drugim musisz po prostu po dodaniu pracownika sortować dane. Skoro to są listy, to sortowanie list nie jest trudne do implementacji. Lub zaimplementuj dodawanie danych w konkretne miejsce. Miałoby to polegać na tym, że przesuwasz się wskaźnikiem do momentu napotkania miejsca wstawienia nowego elementu, i przeszczepiasz wskaźniki. Powiedzmy, że masz listę A, B, C, D, F. Chcesz wstawić E. Lecisz od początku i porównujesz najpierw z A, potem, z B, z C, z D , potem z F <- F jest dalej niż powinno być wstawione E, więc doczepiasz wskaźnik z E do F, i przeczepiasz wskaźnik z D do E. Mam nadzieję, że w miarę zrozumiale to opisałem. Jak nie to polecam stronę eduinf.waw.pl :)
Swoją drogą może lepiej skorzystać z gotowej biblioteki STL <list> :) |
|
pysiek.1996 Temat założony przez niniejszego użytkownika |
» 2017-11-27 11:12:35 Problemem nie są na pewno polskie litery. Skopiowałem nie tą wersję kodu, która zawiera polskie znaki ;) |
|
mateczek |
» 2017-11-27 11:38:39 usuwanie: dojeżdżasz pętlą do żądanej osoby i kasujesz. Nazwy zmiennych nie mogą mieć polskich znaków i spacji!!!! Ogólnie kod jest bezsensu Polskie znaki void ListaZatrudnionych::Usun( const Pracownik & wzorzec ) { Pracownik * temp = new Pracownik, * pierwszy = new Pracownik; * temp = wzorzec; pierwszy = m_pPierwszy; if( pierwszy == NULL ) cout << "PROBLEM, PUSTO TU"; else { while( pierwszy != temp ) { pierwszy = pierwszy->m_nast � pny; } pierwszy = pierwszy->m_nast � pny; } }
Skopiowałem nie tą wersję kodu, która zawiera polskie znak |
No to wstaw posta na forum jasnowidzów skoro testujesz czytanie w myślach na odległość. |
|
pysiek.1996 Temat założony przez niniejszego użytkownika |
» 2017-11-27 13:01:45 void ListaPracownikow::Usun( const Pracownik & wzorzec ) { Pracownik * temp = new Pracownik, * pierwszy = new Pracownik; * temp = wzorzec; pierwszy = m_pPoczatek; if( pierwszy == NULL ) cout << "PROBLEM, PUSTO TU"; else { while( pierwszy != temp ) { pierwszy = pierwszy->m_nNastepny; } pierwszy = pierwszy->m_nNastepny; } }
void ListaPracownikow::DodajNaKoniec( const Pracownik & p ) { Pracownik * nowy = new Pracownik; * nowy = p; if( m_pPoczatek == NULL ) { m_pPoczatek = nowy; } else { Pracownik * temp = m_pPoczatek; while( temp->m_nNastepny != NULL ) { temp = temp->m_nNastepny; } temp->m_nNastepny = nowy; nowy->m_nNastepny = NULL; } }
|
|
mateczek |
» 2017-11-27 20:26:28 //zostaje Ci rozpatrzeć przypadki gdy kasujesz bazę, lub ostatni element listy, lub elementu "wzorzec" nie ma na liście void ListaPracownikow::Usun( const Pracownik & wzorzec ) { Pracownik * temp = m_pPoczatek; while( temp->m_nNastepny != wzorzec ) { temp = temp->m_nNastepny; } Pracownik * doSkasowania = temp->m_nNastepny; temp->m_nNastepny = doSkasowania->m_nNastepny; delete doSkasowania; } |
|
« 1 » |