C语言,成绩管理系统,链表和文件的问题
不知道用链表写到底有什么优点?链表是动态内存分配,节约内存空间。但是学生记录(一个结构体变量)应该是一条一条写进文件、从文件中读取出来的吧?如果用数组或者链表,万一学生很...
不知道用链表写到底有什么优点?链表是动态内存分配,节约内存空间。但是学生记录(一个结构体变量)应该是一条一条写进文件、从文件中读取出来的吧?如果用数组或者链表,万一学生很多,内存开销会很大呀。
还有排序的话(比如按学号或者成绩),是不是要先把所学生的记录从文件读取到内存,在排序?
有些糊涂,希望大家解释一下,谢谢~ 展开
还有排序的话(比如按学号或者成绩),是不是要先把所学生的记录从文件读取到内存,在排序?
有些糊涂,希望大家解释一下,谢谢~ 展开
展开全部
假设学生数未知,但不超过10000。
如果用普通数组,那么你不得不在程序一开始就声明一个长度为10000的数组,就算最终录入的学生只有5个人,但是还是会占用10000个单位的空间。
而用链表,程序一开始甚至一个空间都不需要,当要输入一个学生时,才现声明一个单位空间。如果最终只录入了7人,那么就只占了7个单位空间。
动态内存所说的节约空间,只是相对于固定分配的普通数组而言。
而你说的文件与内存的问题,跟链表无直接关系。不管你用什么数据结构,当数据太多,超过内存容量的时候,肯定都是不能同时全部读入内存的,都必须把当前不需要的部分暂存在硬盘上,等内存把当前数据处理完,写回文件,再把其他部分读入内存操作。
任何数据,都可以有两种存在状态:内存中和硬盘上。所以一个结构体可以全部存在于内存中,也可以在硬盘上。只要内存容量足够,无论多少结构体都可以存在于内存中。而在C语言里,大多数情况下,“结构体”都是在内存中的,因为当“结构体”写回硬盘后,一般都不在称之为“结构体”,而是一堆数据。
C语言的所有数据结构都是指活跃在内存中的数据的结构,因为某个特定结构的数据都是可以直接操作的,这只有放在内存中才能实现。
排序的问题,一般来讲,确实是所有学生都要读入内存才能进行排序。
记住一点,任何数据的操作都是在内存中进行的。
如果用普通数组,那么你不得不在程序一开始就声明一个长度为10000的数组,就算最终录入的学生只有5个人,但是还是会占用10000个单位的空间。
而用链表,程序一开始甚至一个空间都不需要,当要输入一个学生时,才现声明一个单位空间。如果最终只录入了7人,那么就只占了7个单位空间。
动态内存所说的节约空间,只是相对于固定分配的普通数组而言。
而你说的文件与内存的问题,跟链表无直接关系。不管你用什么数据结构,当数据太多,超过内存容量的时候,肯定都是不能同时全部读入内存的,都必须把当前不需要的部分暂存在硬盘上,等内存把当前数据处理完,写回文件,再把其他部分读入内存操作。
任何数据,都可以有两种存在状态:内存中和硬盘上。所以一个结构体可以全部存在于内存中,也可以在硬盘上。只要内存容量足够,无论多少结构体都可以存在于内存中。而在C语言里,大多数情况下,“结构体”都是在内存中的,因为当“结构体”写回硬盘后,一般都不在称之为“结构体”,而是一堆数据。
C语言的所有数据结构都是指活跃在内存中的数据的结构,因为某个特定结构的数据都是可以直接操作的,这只有放在内存中才能实现。
排序的问题,一般来讲,确实是所有学生都要读入内存才能进行排序。
记住一点,任何数据的操作都是在内存中进行的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询