Neredeyse yapılır bir ev iş var ama ben ben işaretçileri ve ben oldukça kayıbım bütün bu tuhaf şeyler kullanıyorum ilk defa olduğunu uyarmak zorunda somewhere.I sıkışmış. Amacım (Soyadı Adı kimliği) gibi bir txt öğrencilerin veri listesinden okumaktır. hüner i Soyadlarını saklamak için bir ikili arama ağacı kullanmak (Bu yaptım) ve birinci ağacın içinde öğrenci ve kimliği (Kısmen tam) ilk isimlerini saklayan başka İkili arama ağacı oluşturmak zorunda olmasıdır. Sorun bazı öğrenci aynı soyadı ve farklı ilk ada sahip olduğunda ben soyadı için yeni bir düğüm oluşturmak olmamalıdır ama soyadının varolan düğüm içinde yeni öğrencilere ad ve id koymak zorunda olmasıdır. Cameron James 12131313: Bu gibi olmalı
Andrew 17286378 (onun soyadı da Cameron)
kodudur:
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 *);
Ana i LoadData çağrı () öğrencileri ithal etmek
loadData(&temp);
Ve LoadData () 'dir
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);
}
Benim ana (soyisimlerin) ağacında yeni bir düğüm eklemek add_node () diyoruz. Bu alo çalışır ..
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;
}
Kullanmak ne argümanlar bilmiyorum .. Bir add_node gibi functon () olan ancak öğrencilerin aynı Soyadı varsa o yeni nameANDid düğümlerini ekler ...; Sorunum (topname = add_node_nameANDid (topname, ısı2)) ile başlar Ben onların kullanımı (ıslak değil en azından) ile deneyimli değilim çünkü işaretçiler nefret ... Ve add_node_nameANDid () 'dir
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 () i Nasıl () add_node_nameANDid içinde işaretçileri kullanmalısınız .. onları anlamak daha kolay olması için benzer değişkenleri kullanmaya çalıştı ben onu copmpile zaman diyor çünkü uyumsuz işaretçi türünden add_node_nameANDid `arasında [Uyarı] geçen arg 1' Çizgide
topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())
ya da argümanı 2 için uyumlu tipi `add_node_nameANDid
topname=add_node_nameANDid(topname,temp2);}
i) add_node den add_node_nameANDid () (çağrı zaman.
Birisi bu karmaşa bana yardımcı lütfen?













