gpt4 book ai didi

c - 二叉搜索树帮助两个结构之间的指针

转载 作者:行者123 更新时间:2023-12-04 06:25:27 26 4
gpt4 key购买 nike

我有一项即将完成的家庭作业,但我卡在某个地方。我必须警告说,这是我第一次使用指针和所有这些奇怪的东西,所以我很迷茫。我的目的是从 txt 学生数据列表中读取(姓氏 ID)。诀窍是我必须使用一个二叉搜索树来存储姓氏(我已经这样做了)并在第一棵树内创建另一个二叉搜索树来存储学生的名字和 ID(部分完整)。问题是,当某些学生具有相同的姓氏和不同的名字时,我不能为这些姓氏创建一个新节点,但我必须将新学生的名字和 id 放在姓氏的现有节点中。它应该是这样的:
卡梅伦詹姆斯 12131313

Andrew 17286378(他的姓氏也是卡梅伦)

代码是:

typedef struct nameANDid{
char first[20];
int ID;
struct node *nleft;
struct node *nright;
}yohoho;
typedef struct node{
char last[20];
struct nameANDid yohoho;
struct node *left;
struct node *right;
}node;
///
struct node temp;
struct nameANDid temp2;
struct node *top=NULL;
struct nameANDid *topname=NULL;
void loadData();
struct nameANDid * add_node_nameANDid(struct nameANDid *, struct nameANDid *);
/////
struct node * add_node (struct node *, struct node *);
struct node * search_node (struct node *, char *);
void print_node (struct node *);
void print_tree (struct node *);

在主要我调用 loadData() 来导入学生
  loadData(&temp);

而 loadData() 是
void loadData(struct node *temp){      
int i;
FILE *fp;
fp=fopen(FILENAME,"r");
if (fp == NULL) printf("File does not exist\n");
for (i=0; i<20; i++){
fscanf(fp,"%s",&temp->last);
fscanf(fp,"%s",&temp->yohoho.first);
fscanf(fp,"%d",&temp->yohoho.ID);
top=add_node(top,temp);
}
fclose(fp);
printf("\n\nFile loaded\n");
}

我调用 add_node() 在我的主(姓氏)树中插入一个新节点。这阿洛有效..
 struct node * add_node (struct node *top, struct node *temp){
struct node *newNode;
if (top == NULL){
newNode=(struct node *)malloc(sizeof(struct node));
temp->left=NULL;
temp->right=NULL;
if (memcpy(newNode,temp,sizeof(struct node)) == NULL) {
printf("Node addition failed\n");
return NULL;}
else {
//printf("Node added\n");
return newNode;}
}
else {
if (stricmp(temp->last,top->last) < 0){
// printf("left\n");
top->left=add_node(top->left,temp);}
else if (stricmp(temp->last,top->last) == 0){
// printf("Last names are equal\n");
topname=add_node_nameANDid(topname,temp2);} //Here is one of my problems
else {
// printf("right\n");
top->right=add_node(top->right,temp);}
// printf("Node added\n");
return top;
}
return NULL;
}

我的问题从 (topname=add_node_nameANDid(topname,temp2);) 开始,它是一个类似 add_node() 的函数,但如果学生的姓氏相同,她会添加新的 nameANDid 节点..我不知道要使用什么参数......我讨厌指针,因为我没有使用它们的经验(至少不是湿的)......
而 add_node_nameANDid() 是
   struct nameANDid * add_node_nameANDid (struct nameANDid *topname, struct nameANDid *temp){
struct nameANDid *newNode_nameANDid;
if (topname == NULL){
newNode_nameANDid=(struct nameANDid *)malloc(sizeof(struct nameANDid));
temp->nleft=NULL;
temp->nright=NULL;
if (memcpy(newNode_nameANDid,temp,sizeof(struct nameANDid)) == NULL){
printf("Node addition failed\n");
return NULL;}
else {
//printf("Node added\n");
return newNode_nameANDid;}
}
else {
if (stricmp(temp->first,topname->first) <= 0){
// printf("leftname\n");
topname->nleft=add_node_nameANDid(topname->nleft,temp);}
else {
// printf("rightname\n");
topname->nright=add_node_nameANDid(topname->nright,temp);}
// printf("Node added\n");
return topname;
}
return NULL;
}

在 add_node_nameANDid() 中,我尝试使用类似的变量来更容易理解它们。
我应该如何使用 add_node_nameANDid() 中的指针,因为当我编译它时它说
[警告] 从不兼容的指针类型中传递 `add_node_nameANDid' 的 arg 1
 topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())

或 `add_node_nameANDid' 的参数 2 的类型不兼容
 topname=add_node_nameANDid(topname,temp2);}

当我从 add_node() 调用 add_node_nameANDid() 时。

请有人帮我解决这个烂摊子吗?

最佳答案

看来问题是你用过node *对于左侧和右侧的结构。所以发生的事情是您正在复制 struct nameANDidstruct node .我建议在 nameANDid您需要nleftnright指向struct nameANDid的指针,不是 struct node .

编辑:还有其他各种问题,例如我认为目的是调查 yohoho在 struct node 中获取名字的二叉树。还有 add_node_nameANDid正在设置 temp->nlefttemp->nrightnull ,不确定这是正确的。

关于c - 二叉搜索树帮助两个结构之间的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094976/

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