Binary keresési fa Probléma importálása nevű txt C

szavazat
0

Van egy házi amely kérni oda, hogy helyezzen be egy szöveges dokumentumot 100 diák nevét és azonosítóját formázva (Név Név ID) ad majd tegye a két bináris keresés fák. A fő BST tartalmaz vezeték- és egy pointert a többi BST amely tartalmazza nevét és azonosítóját. Ez az első alkalom, hogy én vagyok trynig kezelhető mutató (*, ->, &), így elveszett vagyok. Sikerült importálni a szöveget a következő függvény

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

És most próbál létrehozni a betét funkció, ami nagyon nehéz nekem, mert nem értem az érveket, hogy ő kell venni

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

Itt látható a szerkezet meghatározása:

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;

Tud valaki segíteni kijavítani a betét funkciót, mert nem értem milyen érvek azt kell használni, hogy mentse a névre, és én is a többit magam. Azt gondolom, hogy a probléma a betét funkciót. Mindenesetre köszönöm.

A kérdést 22/05/2011 16:36
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Tulajdonképpen megvan a nehezén. A probléma az, strcpyamit csak akar

strcpy(node->surname, sname)

másolni a névre telt el a node szerkezet.

Mellesleg, én egy kicsit kényelmetlen a felszabadítását st->namea loadDatafunkciót. Mi történik az első alkalommal, amikor a függvényt? Remélhetőleg st->nameIS NULL, de előnyös módja az lenne, ha külön elpusztítsa függvény, amely felszabadítja az egész fát. Akkor is párosítható a loadDataés destroyDatafunkciót. Ez mindig a legjobb, hogy a lefoglalt, és megszabadítja a párok így. Azt teszi, hogy valószínű, hogy szivárogni fog a memória, kettős ingyen, stb

Válaszolt 22/05/2011 16:46
a forrás felhasználó

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