Ik heb een huiswerk, die vragen van mij voor een structuur van binaire zoekboom te creëren waar het knooppunt van de binaire zoekboom is een andere binaire zoekboom. De eerste BST heeft de achternamen van studenten en de andere heeft de eerste namen en id. Ook als iemand heeft dezelfde achternaam met een andere student moet ik een andere achternaam knooppunt niet maken, maar ik moet maken binnen de bestaande achternaam knooppunt een ander voornaam en Id node. Om meer specifiek te zijn:
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;
Mijn grootste probleem is hoe u een andere nameANDid knooppunt voor elke voornaam vond ik, want met de volgende code te maken maak ik 2 BST een voor de achternamen en een andere voor de namen, maar ik zou willen zijn zoals bijvoorbeeld: Als ik deze studenten
Stallone Sylvester 11111111
Stallone Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Hogan Daniel 55555555
Ik wil ze op te slaan als volgt: .........
Stallone Sylvester 11111111
Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Daniel 55555555
In plaats daarvan neem ik iets als: ...........
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
Ik zal hier enkele functies om meer specifiek te zijn gezet
De belasting functie laadt de namen uit een txt document.
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);
}
waar
struct node temp;//just a node pointer
struct node *top=NULL; //shows the top of the tree
De AddNode functie is: ...
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;
}
En de add_node_nameANDid () functie is net als de vorige functie, maar het heeft een aantal variabelen veranderd:
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;
}
Sorry voor de enorme bron code die ik alleen het uploaden, maar het zou heel moeilijk uit te leggen, zonder dat dit zijn.
Ik denk dat ik twee problemen, maar ik heb niet de kennis om ze op te lossen hebben.
EERSTE: Ik heb om verschillende voornaam BST te creëren voor elke achternaam knooppunt en ik denk dat ik dat niet doe, maar ik weet niet hoe dat te doen ...
Eventuele suggesties?













