द्विआधारी खोज वृक्ष समस्या सी में txt से नाम आयात कर रहा है

वोट
0

मैं एक होमवर्क जो मुझे इधर-उधर से पूछना एक पाठ दस्तावेज़ से 100 छात्रों के नाम और आईडी की तरह (उपनाम नाम आईडी) विज्ञापन स्वरूपित तो दो द्विआधारी खोज के पेड़ में डाल सम्मिलित करने के लिए की है। मुख्य BST कुलनाम और अन्य BST नाम और आईडी में शामिल होंगे जो करने के लिए एक सूचक शामिल होंगे। (->, और *,) तो मैं भटक गया हूँ यह पहली बार है कि मैं संकेत का उपयोग करने के trynig कर रहा हूँ है। मैं निम्नलिखित समारोह के साथ पाठ आयात करने में कामयाब

void loadData(char fname[], Students *st){
 struct Students *new;
 root=NULL;
int i;
FILE *fp;
fp=fopen(fname,r);
if (fp == NULL) printf(File does not exist\n);
fscanf(fp, %d, &(st->size)); //reads the number of students   
free(st->name);
st->name=(Name*) malloc(st->size*(sizeof(Name)));
for (i=0; i<st->size; i++){
    fscanf(fp, %s,&st);
    insert(root,st.surname);/////////I think here is the problem                
    //fscanf(fp, %s, &st->name[i].firstname);        
   // fscanf(fp, %d, &st->name[i].id);
    }
fclose(fp);
   }

और अब मैं डालने समारोह जो मेरे लिए बहुत मुश्किल है बनाने के लिए क्योंकि मैं तर्क नहीं समझ सकता है कि वह लेना चाहिए कोशिश कर रहा हूँ

STU *insert(STU *node, char *sname)///What should i use here to save take the Surname??
{
if(node==NULL){
    node=(NODE *) malloc(sizeof(STU));
    strcpy(node->surname);
    node->left=NULL;
    node->right=NULL;
}
else{
    if(strcmp(*sname, node->surname)<0)
        insert(node->left, *sname);
    else if(strcmp(*sname, node->surname)>0)
        insert(node->right, *sname);
}
return node;
}

यहाँ संरचना परिभाषा है:

typedef struct Name{
  char firstname[20];   
  int id;
  struct Students *nameleft;
  struct Students *nameright;    
} Name;
typedef struct Students{ 
   char surname[20];    
Name *name;      
int size;
    struct Students *left;
    struct Students *right;     
} Students;
typedef struct Students STU;
struct Students *insert(char num);
struct Students *root=NULL;

किसी को भी मदद कर सकते हैं मुझे डालने समारोह को सही क्योंकि मैं नहीं समझ सकता है जो तर्क मैं उपनाम को बचाने के लिए उपयोग करना चाहिए और मैं बाकी अपने आप हो जाएगा। मुझे लगता है कि मेरी समस्या डालने कार्य है। फिर भी धन्यवाद।

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


1 जवाब

वोट
0

असल में, आप कठिन हिस्सा मिल गया है। समस्या यह है strcpyतुम बस चाहते हैं

strcpy(node->surname, sname)

उपनाम कॉपी करने के लिए नोड संरचना में में पारित कर दिया।

एक अलग रूप में के रूप में, मैं अपने मुक्त के साथ एक छोटे से असहज कर रहा हूँ st->nameअपने में loadDataकार्य करते हैं। क्या पहली बार जब आप समारोह कॉल करूँ? उम्मीद है कि st->nameयह है NULL, लेकिन एक बेहतर तरीका है एक अलग नष्ट समारोह है कि एक पूरे पेड़ भी मुक्त हो जाता है करने के लिए किया जाएगा। तो फिर तुम जोड़ी कर सकते हैं loadDataऔर destroyDataकार्य करते हैं। यह हमेशा आबंटित करता है सबसे अच्छा है और जोड़े के रूप में इस तरह से मुक्त करता है। यह इस बात की संभावना आप रिसाव स्मृति, डबल मुक्त, आदि बनाता है

22/05/2011 को 16:46
का स्रोत उपयोगकर्ता

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