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

Sortowanie z wykorzystaniem drzewa

Ostatnio zmodyfikowano 2014-01-20 11:47
Autor Wiadomość
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ć.

C/C++
#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" );
}
 
P-102557
RazzorFlame
» 2014-01-19 20:01:29
if( el = NULL )
Co to ma być?
P-102560
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.
P-102563
Wiesiek
» 2014-01-20 11:47:55
W ten sposób przy wywołaniu funkcji Dodaj zawsze zastosujesz podstawienie
C/C++
el = NULL
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ą)
P-102598
« 1 »
  Strona 1 z 1