如何通过读取文本文件来创建BST?

时间:2019-05-26 07:56:22

标签: c binary-search-tree nested-function

我必须创建一个学生数据库,其中包含他们的ID,姓名,姓氏和成绩。该信息是从如下所示的txt文件中读取的:

1

有19名学生

我必须读取文件的每一行,并根据其ID创建一个二进制搜索树。创建节点时似乎出现了问题,因为尝试搜索学生时找不到。这是我的代码:

AE797989 Spears Michael 10.00
AA566734 Walsh Brad 10.00
AE808090 Jones Dimitris 5.00
...

我没有收到任何错误消息。.谢谢您的时间!

1 个答案:

答案 0 :(得分:1)

如果此代码未显示任何错误消息,建议您使用其他编译器。 main中的我的扼流圈位于:

    switch (ch) {
    case 1:
        if (insertDone)
            puts("Inserton was already done");
        else {
            struct node* insertNode(struct node *node, char *id, char *name,
                   char *last_name, float grade)      // ERROR HERE
            {
                if (node == NULL)

看起来您已经复制了函数的定义,而不仅仅是调用它。

我的问题是,您设法在一个程序中编写了许多不同的错误。程序的整体结构尚不清楚:好像您是在没有先写纸的情况下就开始编码的(是的,纸和铅笔对于初学者来说仍然是非常好的工具),每个功能应该做什么,它的输入是什么,它的输出应该是什么,以及最终要包含的数据(例如,文件名的哪个部分)。当然,我可以为您编写一个BST程序,但是您从中学不到任何东西。

所以这里有一些提示:

  • 在BST中,您需要在现有节点下插入新数据,因此需要具有以下输入参数的函数insertNode:当前根节点(或第一次为NULL),id,名称,last_name和等级插入。您应该构建输入字符串的新副本(strdup是您的朋友)。此函数将分配一个新结构,填充为字段,如果当前根为NULL,则返回该结构,或将其插入现有树中的正确位置
  • 您要处理文件中的所有行。您将需要一个功能来打开文件,逐行读取文件,并使用上一个文件将新记录插入BST中。

BTW函数定义类似于

struct node *insert(struct node *root, const char id*, const char *name, const char *last_name, float grade) {
    struct node * newnode = malloc(sizeof *newnode);
    ...
    return root;
}

在任何其他函数定义之外,而函数调用将类似于:

struc node *root = NULL;
char id[100], name[100], last_name[100];
float grade;
...
      if (sscanf(line,"%99s %99s %99s %f",id, name, last_name, &grade)) != 4) 
      {
      puts("invalid file");
      return;
      }
      root = insert(root, id, name, last_name, grade);  // here is the function call
相关问题