Witam
Mam problem z kodowanie Huffmana. Napisałem taki program:
#include<iostream>
using namespace std;
struct drzewo
{
drzewo *lewy, *prawy, *rodzic;
char znak;
drzewo();
};
struct element_listy
{
double czest;
drzewo wezel;
element_listy *nastepny;
element_listy();
};
struct lista
{
element_listy *head;
int rozmiar;
void dodaj(double n_czest, drzewo n_wezel);
void znajdz(element_listy *&min1, element_listy *&min2);
void usun(element_listy *element);
lista();
};
void scal(lista l1, element_listy *min1, element_listy *min2);
void kodowanie();
int main()
{
kodowanie();
}
drzewo::drzewo()
{
lewy=NULL;
prawy=NULL;
rodzic=NULL;
}
element_listy::element_listy()
{
nastepny=NULL;
}
lista::lista()
{
head=NULL;
rozmiar=0;
}
void lista::dodaj(double n_czest, drzewo n_wezel)
{
element_listy *nowy = new element_listy;
nowy->czest=n_czest;
nowy->wezel=n_wezel;
if(!head) head=nowy; else
element_listy *temp;
temp=head;
while(temp->nastepny) temp=temp->nastepny;
temp->nastepny=nowy;
nowy->nastepny=NULL;
}
rozmiar++;
}
void lista::znajdz(element_listy *&min1, element_listy *&min2)
{
element_listy *temp1, *temp2;
min1=head;
min2=head->nastepny;
if(min1->czest>min2->czest)
{
temp2=min1;
min1=min2;
min2=temp1;
}
temp1=head->nastepny->nastepny;
while(temp1)
{
if(temp1->czest<min2->czest)
{
temp2=min1;
min1=min2;
min2=temp2;
}
}
temp1=temp1->nastepny;
}
void lista::usun(element_listy *element)
{
element_listy *temp;
temp=head;
if(element==temp)
{
head=temp->nastepny;
rozmiar--;
} else
{
do temp=temp->nastepny; while(temp->nastepny!=element);
if(temp->nastepny->nastepny) temp->nastepny=temp->nastepny->nastepny; else temp->nastepny=NULL;
rozmiar--;
}
}
void scal(lista l1, element_listy *min1, element_listy *min2)
{
drzewo *d1;
*d1->lewy=min1->wezel;
*d1->prawy=min2->wezel;
d1->lewy->rodzic=d1;
d1->prawy->rodzic=d1;
double suma;
suma=min1->czest+min2->czest;
l1.usun(min1);
l1.usun(min2);
l1.dodaj(suma, *d1);
}
void kodowanie()
{
int ile;
char zn;
double p;
element_listy *min1, *min2;
cin >> ile;
lista list;
for(int i=0; i<ile; i++)
{
cin >> zn >> p;
drzewo d1;
d1.znak=zn;
list.dodaj(p, d1);
}
while(list.rozmiar>2)
{
list.znajdz(min1, min2);
scal(list, min1, min2);
}
}
Brakuje jeszcze w nim funkcji wypisującej kod.
Program się kompiluje, jednak po podaniu danych wejściowych pojawia się błąd (w instrukcji list.dodaj(p, d1);
). Niestety nie wiem czym jest on spowodowany.
Będę wdzięczny za wszelkie wskazówki dotyczące tego błędu oraz ewentualnych innych błędów w programie.
Udało się wyeliminować ten błąd, ale prosiłbym o sprawdzenie czy ten program może tak wyglądać, czy są w nim jeszcze jakieś błędy.
Z góry dziękuję :)
Pozdrawiam