Δυαδική αναζήτηση Πρόβλημα δέντρο Εισαγωγή ονόματα από txt σε C

ψήφοι
0

Έχω ένα σπίτι που ζητούν δώθε μου για την εισαγωγή από ένα έγγραφο κειμένου 100 μαθητές ονόματα και τα αναγνωριστικά διαμορφωθεί όπως (Επώνυμο Όνομα ID) διαφήμισης, στη συνέχεια, βάλτε το σε δύο δυαδικά δέντρα αναζήτησης. Η κύρια 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