0
我有一个家庭作业,要求我从文本文档插入100个学生姓名和ID(姓名ID)广告格式,然后将其放在两个二进制搜索树中。主BST将包含姓氏和指向其他BST的指针,其中将包含名称和ID。这是我第一次尝试使用指针(*, - >,&),所以我失去了。我设法用下面的函数二进制搜索树问题从C中的txt导入名称
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;
谁能帮我纠正了插入功能,因为我不明白我必须使用哪些参数保存surnam我会自己去做其他事情。我认为我的问题是插入功能。 无论如何,谢谢。
感谢您的答案,它的工作...以及...我有另一个问题..当我complie它说[fscanf(fp,“ %s“,&st); insert(root,st.surname)] st.surname是int,但希望st.surname是一个字符(当我调用insert时,请看LoadData函数)....它说([Warning]通过'insert'的arg 2使得整型指针没有强制转换) – Spyros 2011-05-22 17:12:12
是的,你已经混淆了你的指针和非指针类型,你希望第二个参数'insert'变成'char *'类型有'char'。当你在'insert'递归时,你希望参数只是'sname',而不是'* sname'。 – andrewdski 2011-05-22 17:26:36
谢谢谢谢!!!它工作正常!祝福你! – Spyros 2011-05-22 17:59:28