Witam,
Piszę słownik tel. kom. W BST i mam problem z dodaniem elementu otóż przy dodawaniu elementu zastępuje/ gubi słowa a właściwie to nie wiem co się dzieje. :( Gdybym mógł korzystać z biblioteki string to bym dał radę a tak to już limit pomysłów mi się wyczerpał. :( Wiem że rzutowanie mogło być inaczej itd. ale gdzie jest ten błąd :P. Pozdrawiam
/*MZ*/
#include<stdlib.h>
#include<stdio.h>
#define null 0
//#include<conio.h>
const int dlugosc=100;
//Struktura drzewa przechowuje: litery-slowa(w int) identyfikator-zamienione slowa na T9, wskazniki na poprzednika
struct DrzewoBST
{
char litera[dlugosc];
int identyfikator_T9[dlugosc];
int identyfikator_sort[dlugosc];
};
struct Wezel
{
DrzewoBST dane;
Wezel *lewy;
Wezel *prawy;
};
// DrzewoBST *parent=null;
Wezel *root=null;
//DrzewoBST *klucz;
//Zamienia znaki char na kod z ascii do int
int rzutowanie(int i,const char znaki[])
{
char tymczasowy[1];
tymczasowy[0]=znaki[i];
return static_cast<int>(tymczasowy[0]);
}
//Przypisuje kazdej literze odpowiedni kod i zapisuje go do tablicy
int kody_t9(int *pom, const char literki[])
{
if(literki[*pom]=='a' || literki[*pom]=='b' || literki[*pom]=='c') return 2;
else if(literki[*pom]=='d' || literki[*pom]=='e' || literki[*pom]=='f') return 3;
else if(literki[*pom]=='g' || literki[*pom]=='h' || literki[*pom]=='i') return 4;
else if(literki[*pom]=='j' || literki[*pom]=='k' || literki[*pom]=='l') return 5;
else if(literki[*pom]=='m' || literki[*pom]=='n' || literki[*pom]=='o') return 6;
else if(literki[*pom]=='p' || literki[*pom]=='q' || literki[*pom]=='r' || literki[*pom]=='s') return 7;
else if(literki[*pom]=='t' || literki[*pom]=='u' || literki[*pom]=='v') return 8;
else if(literki[*pom]=='w' || literki[*pom]=='x' || literki[*pom]=='y' || literki[*pom]=='z') return 9;
}
void Dodaj(Wezel **tree, const char literki[])
{
Wezel *nowy=null, *y=null;
Wezel *curr=*tree;
int i=0; //zmienna pomocnicza pozwalajaca zapelnic tablice
int wartosc[dlugosc]; //Tablica pomocnicza przechowywane sa w niej kody slowa T9
int sort_id[dlugosc];
int pom=0; //zmienna pomocnicza zapamietuje dlugosc tablicy
for(i=null;i<dlugosc;i++) wartosc[i]=null;
//Zamiana na kodowanie T9
i=0;
while(literki!=null)
{
wartosc[pom]=kody_t9(&pom,literki);
i++;
pom++;
}
//Zamienia litery na kod ascii co pozwala na optymalne dodanie slow do drzewa binarnego
for(i=null;i<dlugosc;i++) sort_id[i]=null;
i=0;
while(literki[i]!=null)
{
sort_id[i]=rzutowanie(i,literki);
i++;
}
i=0;
//Utworzenie nowego rekordu dla drzewa
nowy=new (Wezel);
i=0;
while(literki[i]!=null)
{
nowy->dane.litera[i]=literki[i];
nowy->dane.identyfikator_T9[i]=wartosc[i];
nowy->dane.identyfikator_sort[i]=sort_id[i];
i++;
}
nowy->lewy=nowy->prawy=null;
i=0;
//Wyszukiwanie odpowiedniej pozycji dla nowych danych
while(curr != null)
{
y=curr;
if((sort_id[i] > y->dane.identyfikator_sort[i])) curr=curr->prawy;
else if((sort_id[i] <= y->dane.identyfikator_sort[i])) curr=curr->lewy;
printf("%d",y->dane.identyfikator_sort[i]);
i++;
}
i=i-1;
if(root==null) *tree = nowy;
else if ((nowy->dane.identyfikator_sort > y->dane.identyfikator_sort)==false) y->prawy=nowy;
else if ((nowy->dane.identyfikator_sort <= y->dane.identyfikator_sort)==false) y->lewy=nowy;
}
int zwroc_liczbe(int pom, const char liczby[])
{
char tymczasowy[1];
tymczasowy[0]=liczby[pom];
return atoi(tymczasowy);
}
void pinorder(Wezel *tree)
{
if(tree!=null)
{
pinorder(tree->lewy);
printf("%s ",tree->dane.litera);
pinorder(tree->prawy);
}
}
int main(void)
{
char litery[dlugosc]; //Tablica zawierajace slowa
int n; //okresla ilosc slow w slowniku
int m; //Liczba zapytan
int i; //zmienna pomocnicza
int pom=0;;
char tablica[dlugosc];
int liczby[dlugosc]; //tablica char zamieniona na tablice int
scanf("%i", &n);
while(n--)
{
for(i=null;i<dlugosc;i++) {litery[i]=null;} //Zerowanie tablicy z slowami
scanf("%s",litery);
Dodaj(&root,litery);
pinorder(root);
}
system("Pause");
}