मैं एक होमवर्क जो मुझ से द्विआधारी खोज पेड़ की एक struct बनाने के लिए जहां द्विआधारी खोज वृक्ष के अपने नोड एक और द्विआधारी खोज वृक्ष है पूछना है। पहले BST छात्रों के उपनाम है और एक दूसरे को पहले के नाम और आईडी है। किसी अन्य छात्र मैं एक और उपनाम नोड तैयार नहीं करना चाहिए साथ ही उपनाम है, लेकिन मैं मौजूदा उपनाम नोड के अंदर एक और पहला नाम और पहचान नोड बनाने के लिए इसके अलावा, अगर। अधिक विशिष्ट होना:
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;
अगर मैं इन छात्रों है: मेरी मुख्य समस्या यह है हर firstname मैं निम्नलिखित कोड के साथ क्योंकि पाया के लिए एक अलग nameANDid नोड बनाने के लिए कैसे मैं कुलनाम के लिए 2 BST एक और एक अन्य नाम के लिए बनाने, लेकिन मैं उदाहरण के लिए की तरह बनना चाहते हैं
Stallone Sylvester 11111111
Stallone Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Hogan Daniel 55555555
मैं उन्हें इस तरह संग्रहीत करना चाहते हैं: .........
Stallone Sylvester 11111111
Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Daniel 55555555
इस के बजाय मैं कुछ की तरह ले: ...........
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
मैं आदेश अधिक विशिष्ट में यहाँ कुछ कार्यों डाल देंगे
लोड समारोह एक txt दस्तावेज़ से नाम लोड करता है।
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);
}
कहा पे
struct node temp;//just a node pointer
struct node *top=NULL; //shows the top of the tree
addnode समारोह है: ...
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;
}
और add_node_nameANDid () फ़ंक्शन पिछले समारोह की तरह है लेकिन यह कुछ चर बदल गया है:
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;
}
कि मैं सिर्फ अपलोड लेकिन यह इस बिना समझाने के लिए काफी मुश्किल होगा विशाल स्रोत कोड के लिए खेद है।
मुझे लगता है कि मैं दो समस्याएं हैं, लेकिन मैं ज्ञान उन्हें हल करने की जरूरत नहीं है।
सबसे पहले: मैं प्रत्येक उपनाम नोड के लिए अलग firstname BST बनाने के लिए और मुझे लगता है कि मैं ऐसा नहीं है कि लेकिन मुझे लगता है कि ऐसा करने के लिए पता नहीं कैसे ...
कोई सुझाव?













