我有一个家庭工作即将完成,但我卡住了某处。我必须警告,这是我第一次使用指针和所有这些怪异的东西,米相当丢失。我的目的是从txt学生数据列表中读取(姓氏名称ID)。诀窍是我必须使用一个二叉搜索树来存储姓氏(我已经这样做了),并在第一棵树内创建另一个二叉搜索树,其中存储学生的名字和ID(部分完成)。问题是,当一些学生有相同的姓氏和不同的名字时,我不能为姓氏创建一个新的节点,但我必须将新学生的名字和ID放在现有的姓氏节点中。它应该是这样的: 卡梅伦詹姆斯12131313二叉搜索树帮助指针之间的两个结构
安德鲁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(),它在我的主(姓氏)树中插入一个新节点。这ALO工程..
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 functon(),但她增加了新的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()中的指针因为È当我copmpile它上面说的`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()。
可以请某人帮我解决这个问题吗?
谢谢!!! ..肯定会在报告窗口中显示很多行,但是您是否知道如何从add_node()调用add_node_nameANDid()..它仍然说“参数2的ncompatible类型当我调用topname = add_node_nameANDid(topname,temp2)时,'add_node_nameANDid'; – Spyros 2011-05-23 09:25:18
我按照你的建议和“topname = add_node_nameANDid(topname,&temp-> yohoho);”它的工作!!!! ...好祝福你!!!!!!!!!!!!!!!!!!!!!!!!!! – Spyros 2011-05-23 09:39:17