使用C时在文本文件中读取链表

时间:2010-11-24 15:17:31

标签: c list sorting

我有一个名为student的结构:

struct student{
   char*lastName;
   char*firstName;
   int age;
   float grade[3];
}

我如何阅读应该读入学生记录数组的文本文件。所有学生的年龄应随机生成,范围从18到35岁。每个学生有3个文本等级,从0到100。

3 个答案:

答案 0 :(得分:2)

首先,如果我理解你的问题,你应该提供一个链表。由于链接列表比读取文件,生成数字等更棘手,所以我只会给你提示。

如果你必须把你的学生放在一个简单的数组中,这将很容易,例如,一个简单的学生myArray [100]会这样做。 这意味着你的所有学生都将被存放在记忆的同一部分。像那样:(A)(B)(C)。 A,B和C是三个学生,彼此相邻。如果你要有大量的学生,这是不方便的,因为你必须在记忆中找到一个足够大的区域来储存一切。这就是为什么有链表:所以你可以把你的学生放在记忆中。例如:(A)(一些其他数据)(B)(一些其他数据)(C)。在那里,你不需要在你的记忆中拥有一个大而独特的自由空间。

但是有一个问题:当你使用数组时,很容易找到你的数据。您只需要知道数组的开头,然后计算从数组的第一项开始的数据的数量。这就是你做的时候的意思:例如myArray [4]。

由于你要使用链表,你无法计算数据的位置,因为,这就是链表的想法,它们可以在任何地方。这就是列表链接的原因:您需要提供从数据到数据的方法。你将使用C程序员最好的朋友:指针。

所以你必须改进你的结构:

struct student{ 
   char* lastName; 
   char* firstName; 
   int age; 
   float grade[3]; 
   student* next
} 

你需要一个非常重要的变量:student * listStart。这相当于您正在使用的“数组”变量。如果您想访问数据,则需要启动的地方。

现在,你基本上要做的是:

  1. 阅读存储学生的文件。
  2. 对于每个学生,使用malloc()为这个学生分配足够的内存(研究malloc()如何工作,这是非常重要的。)
  3. 如果这是第一个学生,listStart指向这名学生。
  4. 对于这位新创建的学生,请填写所有字段(姓名,成绩等)。用这个学生的地址填写前一个学生的“下一个”指针。您正在创建的学生的“下一个”指针应为“NULL”,以防它是列表的末尾。
  5. 好吧,起初有点混乱。但如果你设法做到这一点,你将学到一些有用的东西,而不是我们为你做功课。祝你好运;

答案 1 :(得分:0)

我想你可以从这开始:

答案 2 :(得分:0)

好的,我可能会帮忙。但是,需要更多信息。文本文件包含什么内容?如果您需要随机生成的年龄...这很容易只需使用随机数生成器方法(谷歌)并定义其边界,每次通过循环调用它以获得随机年龄。此外,为成绩做到这一点。至于数组,我很确定你可以创建一个结构列表(c#就像List mylist = new List();)或者,你可以做一个结构数组。

如果您使用的文本文件包含部分数据(例如只有名字和姓氏)。我会在循环中读取文本文件,分配名字和姓氏。然后循环遍历数组/列表的长度,每次调用年龄和等级的随机数。然后在每个年龄等级的循环中分配该位置。所以student [i] .age = * random gen方法返回val。