दो संरचनाएं के बीच संकेत के साथ बाइनरी खोजें ट्री सहायता

वोट
2

मैं एक घर का काम है जो लगभग पूरा हो चुका है, लेकिन मैं कहीं चेतावनी देने के लिए है कि यह पहली बार मैं संकेत दिए गए और इन सभी अजीब सामान तो मैं सुंदर खो रहा हूँ का उपयोग कर रहा है अटक गए हैं। मेरे उद्देश्य के रूप में (उपनाम नाम आईडी) एक txt छात्रों डेटा सूची से पढ़ने के लिए है। चाल मैं एक द्विआधारी खोज वृक्ष का उपयोग करने के उपनाम स्टोर करने के लिए (मैं यह किया है) और पहले पेड़ के अंदर जो छात्रों और आईडी (आंशिक रूप से पूरा) के पहले नाम संग्रहीत करता है एक और द्विआधारी खोज वृक्ष बनाने के लिए है। समस्या यह है कि जब कुछ छात्र एक ही उपनाम और विभिन्न पहला नाम है मैं कुलनाम के लिए एक नया नोड तैयार नहीं करना चाहिए, लेकिन मैं अंतिम नाम के एक मौजूदा नोड के अंदर नए छात्रों प्रथम नाम और आईडी डाल करने के लिए है। कैमरून जेम्स 12131313: यह की तरह होना चाहिए

एंड्रयू 17286378 (अपने उपनाम भी कैमरून है)

कोड है:

typedef struct nameANDid{
    char first[20];
    int ID;
    struct node *nleft;
    struct node *nright;
}yohoho;
typedef struct node{  
   char last[20];  
   struct nameANDid yohoho;  
   struct node *left;
   struct node *right;
 }node;
 ///
 struct node temp;
 struct nameANDid temp2;
 struct node *top=NULL;
 struct nameANDid *topname=NULL;
 void loadData();
 struct nameANDid * add_node_nameANDid(struct nameANDid *, struct nameANDid *);
 /////
 struct node * add_node (struct node *, struct node *);
 struct node * search_node (struct node *, char *);
 void print_node (struct node *);
 void print_tree (struct node *);

मुख्य में मैं loadData फोन () के छात्रों को आयात करने के लिए

  loadData(&temp);

और loadData () है

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<20; i++){       
    fscanf(fp,%s,&temp->last);
    fscanf(fp,%s,&temp->yohoho.first);
    fscanf(fp,%d,&temp->yohoho.ID);     
    top=add_node(top,temp);
    }
fclose(fp);
printf(\n\nFile loaded\n);  
}

मैं add_node () जो अपने मुख्य (उपनाम) पेड़ में एक नया नोड डालने कहते हैं। यह आलो काम करता है ..

 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 {      
     //printf(Node added\n);
     return newNode;}
   }
   else {   
      if (stricmp(temp->last,top->last) < 0){
         // printf(left\n);
        top->left=add_node(top->left,temp);}
      else if (stricmp(temp->last,top->last) == 0){
        // printf(Last names are equal\n); 
        topname=add_node_nameANDid(topname,temp2);} //Here is one of my problems
      else {
        // printf(right\n);
        top->right=add_node(top->right,temp);}
        // printf(Node added\n);   
        return top;
       } 
      return NULL;
  }   

मेरी समस्या के साथ (topname = add_node_nameANDid (topname, temp2);) शुरू होता है जो () add_node की तरह एक functon है लेकिन अगर छात्रों को एक ही उपनाम है वह नया nameANDid नोड्स कहते हैं .. मैं क्या तर्क का उपयोग करने के नहीं पता ... मैं संकेत नफरत क्योंकि मैं उनके उपयोग (गीला नहीं कम से कम) के साथ अनुभव नहीं कर रहा हूँ ... और add_node_nameANDid () है

   struct nameANDid * add_node_nameANDid (struct nameANDid *topname, struct nameANDid *temp){
     struct nameANDid *newNode_nameANDid;  
     if (topname == NULL){    
    newNode_nameANDid=(struct nameANDid *)malloc(sizeof(struct nameANDid));
    temp->nleft=NULL;
    temp->nright=NULL;
    if (memcpy(newNode_nameANDid,temp,sizeof(struct nameANDid)) == NULL){
       printf(Node addition failed\n);
       return NULL;}
    else {      
      //printf(Node added\n);
      return newNode_nameANDid;}
    }
    else {   
        if (stricmp(temp->first,topname->first) <= 0){
           // printf(leftname\n);
           topname->nleft=add_node_nameANDid(topname->nleft,temp);}
        else {
           // printf(rightname\n);
           topname->nright=add_node_nameANDid(topname->nright,temp);}
          // printf(Node added\n);   
          return topname;
        } 
        return NULL;
     }

add_node_nameANDid () में मैं इसी तरह चर का उपयोग करने के लिए उन्हें समझने के लिए आसान हो करने के लिए .. कैसे मैं () add_node_nameANDid में संकेत का उपयोग करना चाहिए की कोशिश की, क्योंकि जब मैं इसे copmpile यह कहता है [चेतावनी] गुजर असंगत सूचक प्रकार से `add_node_nameANDid की आर्ग 1 ' पंक्ति में

 topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())

या का तर्क 2 के लिए असंगत प्रकार `add_node_nameANDid '

 topname=add_node_nameANDid(topname,temp2);}

जब मैं add_node से add_node_nameANDid () () कहते हैं।

कृपया कर सकते किसी को इस गंदगी के साथ मेरी मदद?

23/05/2011 को 09:57
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
3

ऐसा लगता है कि समस्या यह है कि आप का इस्तेमाल किया है है node *संरचनाओं छोड़ दिया और सही दोनों के लिए। तो क्या हो रहा है कि आप एक कॉपी कर रहे हैं है struct nameANDidएक में struct node। मेरा सुझाव है कि में nameANDidआप की जरूरत nleftहै और nrightकरने के लिए संकेत होने के लिए struct nameANDid, नहीं struct node

संपादित करें: वहाँ विभिन्न अन्य समस्याओं जैसे मुझे लगता है कि इरादा पर गौर किया जाएगा रहे हैं, yohohostruct नोड में पहला नाम की बाइनरी पेड़ पाने के लिए। इसके अलावा add_node_nameANDidस्थापित कर रही है temp->nleftऔर temp->nrightकरने के लिए null, यकीन नहीं कि यह सही है।

23/05/2011 को 10:12
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more