gpt4 book ai didi

c - 二叉搜索树在C中从txt导入名称问题

转载 作者:行者123 更新时间:2023-11-30 18:05:43 25 4
gpt4 key购买 nike

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

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;

任何人都可以帮我纠正插入函数,因为我不明白我必须使用哪些参数来保存姓氏,剩下的我会自己做。我认为我的问题是插入功能。不管怎样,谢谢。

最佳答案

事实上,最困难的部分是你。问题是 strcpy 你只是想要

strcpy(node->surname, sname)

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

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

关于c - 二叉搜索树在C中从txt导入名称问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com