Sortowanie z wykorzystaniem drzewa
Ostatnio zmodyfikowano 2014-01-20 11:47
Keraj Temat założony przez niniejszego użytkownika |
Sortowanie z wykorzystaniem drzewa » 2014-01-19 19:13:01 Witam, chcę napisać program który wczytuje i sortuje wyrazy z pliku tekstowego. Napisałem fragment kodu i nie wiem czego w nim brakuje lub co trzeba poprawić by ruszył. Tak kompilowany nie wyrzuca błędów lecz gdy dodam w main'ie polecenia od razu wywala błędy. Byłbym wdzięczny gdyby ktoś postarał się go poprawić. #include<iostream> #include<fstream> #include<stdio.h> #include<string> using namespace std;
struct sLisc { string wyraz; int licznik; sLisc * L; sLisc * R; };
sLisc * Dodaj( string w, sLisc * el ) { sLisc * a; if( el = NULL ) { a = new sLisc; a->wyraz = w; a->licznik = 1; a->L = NULL; a->R = NULL; return a; } if( el->wyraz == w ) { el->licznik++; return el; } if( el->wyraz > w ) { a = Dodaj( w, el->L ); if( el->L == NULL ) el->L = a; return a; } if( el->wyraz < w ) { a = Dodaj( w, el->R ); if( el->R == NULL ) el->R = a; return a; } }
sLisc * Otworz( char * nazwa ) { fstream strumien( nazwa, ios::in ); string t; sLisc * root = NULL; strumien >> t; root = Dodaj( t, NULL ); while( !strumien.eof() ); { strumien >> t; Dodaj( t, root ); } strumien.close(); return root; }
void Wyswietl( sLisc * lisc ) { if( lisc->L != NULL ) Wyswietl( lisc->L ); cout << lisc->wyraz << " , " << lisc->licznik; if( lisc->R != NULL ) Wyswietl( lisc->R ); }
int main() { system( "pause" ); }
|
|
RazzorFlame |
» 2014-01-19 20:01:29 |
|
Keraj Temat założony przez niniejszego użytkownika |
» 2014-01-19 20:08:13 W ten sposób chciałem dodać korzeń, czyli pierwszy wyraz z którym kolejne byłyby porównywane. |
|
Wiesiek |
» 2014-01-20 11:47:55 W ten sposób przy wywołaniu funkcji Dodaj zawsze zastosujesz podstawienie czyli wewnątrz tej funkcji stracisz informacje o adresie przechowywanym przez el (na zewnątrz jest ok, bo wołasz przez wartość wskaźnika). Ponieważ el=NULL ma zawsze wartość logiczną 0, więc do pierwszego if nigdy nie wejdziesz. Innym problemem jest niezerowanie adresów L i R przy tworzeniu struktury. Najlepiej w konstruktorze klasy jawnie dać wartość NULL dla tych wskaźników (struct jest klasą) |
|
« 1 » |