二进制搜索树问题从C中的txt导入名称

时间:2011-05-22 15:36:50

标签: c pointers binary-search-tree

我有一个家庭作业,要求我从文本文件中插入100个学生姓名和格式为(姓氏ID)广告的ID,然后将其放入两个二元搜索树中。主BST将包含姓氏和指向其他BST的指针,其中包含姓名和ID。这是我第一次尝试使用指针(*, - >,&),所以我很失落。我设法使用以下函数导入文本

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;

任何人都可以帮我纠正插入功能,因为我无法理解我必须使用哪些参数来保存姓氏,我将自己完成剩下的工作。我认为我的问题是插入功能。 不管怎样,谢谢。

1 个答案:

答案 0 :(得分:0)

实际上,你已经遇到了困难。问题是strcpy你只想要

strcpy(node->surname, sname)

将传入的姓氏复制到节点结构中。

顺便说一句,我对st->name函数中的loadData释放感到有点不舒服。第一次调用该函数会发生什么?希望st->nameNULL,但更好的方法是拥有一个单独的销毁函数来释放整棵树。然后,您可以配对loadDatadestroyData功能。最好以这种方式分配和释放成对。它使你不太可能泄漏内存,双重免费等等。