簡體   English   中英

二進制搜索樹問題從C中的txt導入名稱

[英]Binary search tree Problem Importing names from txt in C

我有一個作業,要求我從文本文檔中插入100個學生姓名和ID,格式如(姓氏ID)廣告,然后將其放入兩個二進制搜索樹中。 主BST將包含姓氏和指向另一個BST的指針,該BST將包含名稱和ID。 這是我第一次嘗試使用指針(*,->,&),所以我迷失了。 我設法通過以下功能導入文本

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)

將傳入的姓氏復制到節點結構中。

st->name一句,我對您在loadData函數中釋放st->name感到不舒服。 第一次調用該函數會發生什么? 希望st->nameNULL ,但是一種更可取的方法是擁有一個單獨的destroy函數,以釋放整個樹。 然后,您可以將loadDatadestroyData函數配對。 始終最好以這種方式將分配和釋放成對。 它使您不太可能泄漏內存,雙倍可用空間等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM