Van egy házi amely kérdezni tőlem, hogy hozzon létre egy struct bináris keresési fa, ahol a csomópont a bináris keresési fa egy másik bináris keresési fa. Az első BST van a vezetéknevek a diákok és a másik pedig az első nevek és id. Akkor is, ha valaki ugyanazt a családi egy másik hallgató Nem szabad létrehozni egy „névre” node de azt kell, hogy hozzon létre benne a meglévő „névre” node másik „első nevét és Id” csomópontot. Ahhoz, hogy konkrétabb:
typedef struct nameANDid{ //name and id nodes
char first[20];
int ID;
struct nameANDid *nleft;
struct nameANDid *nright;
}yohoho;
typedef struct node{ //surname nodes
char last[20];
struct nameANDid yohoho;
struct node *left;
struct node *right;
}node;
A fő probléma az, hogy hozzon létre egy másik nameANDid csomópont minden keresztnev találtam, mert a következő kód hozhatok 2 BST egyet a családnevek és egy másikat a neveket, de szeretnék olyan lenni, mint például: Ha van ilyen diákok
Stallone Sylvester 11111111
Stallone Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Hogan Daniel 55555555
Azt szeretné tárolni őket, mint ez: .........
Stallone Sylvester 11111111
Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Daniel 55555555
Ahelyett, hogy ezt veszem valami hasonló: ...........
Stallone Sylvester 11111111.
Noah 22222222
Chuck 33333333
Hulk 44444444
Daniel 55555555
Norris Sylvester 11111111.
Noah 22222222
Chuck 33333333
Hulk 44444444
Daniel 55555555
Hogan Sylvester 11111111.
Noah 22222222
Chuck 33333333
Hulk 44444444
Daniel 55555555
Adom itt néhány funkció annak érdekében, hogy pontosabb
A terhelési funkció betölti a neveket a txt dokumentumot.
void loadData(struct node *temp){
int i;
FILE *fp;
fp=fopen(FILENAME,r);
if (fp == NULL) printf(File does not exist\n);
for (i=0; i<5; i++){
fscanf(fp,%s,&temp->last);
fscanf(fp,%s,&temp->yohoho.first);
fscanf(fp,%d,&temp->yohoho.ID);
top=add_node(top,temp); //this function create a surname node
}
fclose(fp);
printf(\n\nFile loaded\n);
}
hol
struct node temp;//just a node pointer
struct node *top=NULL; //shows the top of the tree
A addNode funkció: ...
struct node * add_node (struct node *top, struct node *temp){
struct node *newNode;
if (top == NULL){
newNode=(struct node *)malloc(sizeof(struct node));
temp->left=NULL;
temp->right=NULL;
if (memcpy(newNode,temp,sizeof(struct node)) == NULL){
printf(Node addition failed\n);
return NULL;}
else {
topname=add_node_nameANDid(topname,&temp->yohoho); //Call the add_node_nameANDid to create a new name node in the other tree
return newNode;}
}
else {
if (stricmp(temp->last,top->last) < 0){ //Insert node surname left
top->left=add_node(top->left,temp);}
else if (stricmp(temp->last,top->last) == 0){
topname=add_node_nameANDid(topname,&temp->yohoho); //Call the add_node_nameANDid to create a new name node in the other tree if i have the same surname
}
else {
top->right=add_node(top->right,temp);
}
return top;
}
return NULL;
}
És add_node_nameANDid () függvény olyan, mint az előző funkciót, de van néhány változót változott:
struct nameANDid * add_node_nameANDid (struct nameANDid *topname, struct nameANDid *temp2){
struct nameANDid *newNode_nameANDid;
if (topname == NULL){
newNode_nameANDid=(struct nameANDid *)malloc(sizeof(struct nameANDid));
temp2->nleft=NULL;
temp2->nright=NULL;
if (memcpy(newNode_nameANDid,temp2,sizeof(struct nameANDid)) == NULL){
printf(Node addition failed\n);
return NULL;}
else {
return newNode_nameANDid;}
}
else {
if (stricmp(temp2->first,topname->first) <= 0){
topname->nleft=add_node_nameANDid(topname->nleft,temp2);}
else {
topname->nright=add_node_nameANDid(topname->nright,temp2);}
return topname;
}
return NULL;
}
Elnézést a hatalmas forráskódot, hogy én csak feltölteni, de ez nagyon nehéz lenne megmagyarázni anélkül, hogy ez.
Azt hiszem, hogy van két probléma, de nem az a tudás, hogy megoldja őket.
ELSŐ: Azt kell létrehozni a különböző keresztnev BST minden névre csomópont, és azt hiszem, hogy én nem teszek ilyet, de nem tudom, hogyan kell csinálni, hogy ...
Valami javaslat?













