C txt isim İthalat İkili arama ağacı Sorunu

oy
0

Bir metin belgesinden sonra da iki ikili arama ağaçları koymak (Soyadı Adı ID) reklam gibi biçimlendirilmiş 100 öğrenci adları ve kimlikleri eklemek için bana fro sormak bir ödev var. Ana BST soyadı ve isim ve kimliklerini içerecek diğer BST için bir işaretçi ihtiva edecektir. (->, & *,) bu yüzden ben kayboldum Bu i işaretçileri kullanmak trynig ediyorum ilk defa. Aşağıdaki işlevi ile metin içe başardı

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

Ve şimdi o almak gerektiğini ı argümanları anlayamıyorum çünkü benim için çok zor insert fonksiyonunu oluşturmak çalışıyorum

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

İşte yapısı tanımı şöyledir:

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;

Herkes ben soyadını kaydetmek için kullanması gereken argümanlar anlayamaz ve ben Gerisini kendim yapacağım çünkü beni insert işlevini düzeltmek yardımcı olabilir. Benim sorun ekleme fonksiyonu olduğunu düşünüyorum. Yine de teşekkürler.

Oluştur 22/05/2011 saat 16:36
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Aslında, zor kısmı var. Problemdir strcpysadece istemek

strcpy(node->surname, sname)

soyadını kopyalamak için düğüm yapısına içinde geçti.

Bir kenara, ben senin azat ile biraz rahatsız olduğum st->nameiçin de loadDataişlevi. Ne işlevini çağırmak ilk zaman olur? Umarım st->nameis NULL, ama bir tercih yolu bütün bir ağaç boşaltır ayrı imha fonksiyonu var olacaktır. Sonra eşleştirebilirsiniz loadDatave destroyDataişlev. Bu ayırır olması her zaman en iyisidir ve çiftler halinde bu şekilde serbest bırakır. O olası bellek, çift ücretsiz vb sızıntı yapar

Cevap 22/05/2011 saat 16:46
kaynak kullanıcı

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