Binäre Suchbaum Problem Namen von txt in C importieren

stimmen
0

Ich habe eine Hausaufgaben, die fro mich fragen, aus einem Textdokument 100 Studenten Namen und IDs einfügen formatiert wie (Name Vorname ID) ad dann die binäre Suchbäume in zwei gesetzt. Der Haupt BST enthält Namen und einen Zeiger auf den anderen BST, die Namen und IDs enthalten. Dies ist das erste Mal, dass ich trynig Zeiger zu verwenden (*, ->, &), so bin ich verloren. Ich schaffte es, den Text mit der folgenden Funktion zu importieren

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);
   }

Und jetzt bin ich versucht, die Insert-Funktion zu schaffen, die für mich sehr schwierig ist, weil ich nicht die Argumente verstehen, dass sie nehmen sollte

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;
}

Hier ist die Strukturdefinition:

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;

Kann mir jemand helfen, die Insert-Funktion zu korrigieren, weil ich nicht verstehen kann, welche Argumente ich den Namen speichern verwenden müssen, und ich werde den Rest selber. Ich denke, dass mein Problem die Insert-Funktion ist. Danke trotzdem.

Veröffentlicht am 22/05/2011 um 16:36
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Eigentlich hast du den harten Teil bekommt. Das Problem ist , strcpySie nur wollen

strcpy(node->surname, sname)

den Namen übergeben, in der Knotenstruktur zu kopieren.

Als beiseite, ich bin ein wenig unwohl mit Ihrer Befreiung st->namein Ihrer loadDataFunktion. Was geschieht , das erste Mal , wenn Sie die Funktion aufrufen? Hoffentlich st->nameheißt NULL, aber eine bevorzugte Art und Weise wäre eine separate zerstören Funktion zu haben , die einen ganzen Baum freigibt. Dann können Sie das Paar loadDataund destroyDataFunktion. Es ist immer am besten allocates zu haben und gibt als Paare auf diese Weise. Es macht es unwahrscheinlich , dass Sie Speicher, doppelt leckagefrei, usw.

Beantwortet am 22/05/2011 um 16:46
quelle vom benutzer

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