C语言中链表的存储、读取、修改问题

我已经知道链表内的数据如何保存到文件中去了,现在有几个东西有点乱,请哪位达人给教下。
先说一下我自己的办法。
首先要读取一个用链表存储成的文件,先建立一个与之相对应的结构体,然后以"r"模式下打开文件,一个一个把结构体读出来,再用malloc分配至堆中去,直至EOF.然后对堆中的数据进行相应的修改操作.全部修改完后,再将堆中的数据一个一个存回文件中去?然后我有这么几个问题.
1、链表存到文件中去后,再取出来是不是要再次对各个元素进行链表的关联(就是下一个元素地址赋予前一个元素中的地址变量中)?有没有更简单的方法让其自动恢复原先的链表关系?
2、编辑前,是否需要将整个文件流从文件中都读取至堆里去,连立成一个链表?如果文件很大,大过内存怎么办?
3、如果整个文件都读出至堆中,并关联成了链表,那么修改后用fwrite()再次保存至文件中时,是不是把原来的记录都覆盖了还是在后面追求啊?

1、链表存到文件中去后,再取出来是不是要再次对各个元素进行链表的关联(就是下一个元素地址赋予前一个元素中的地址变量中)?有没有更简单的方法让其自动恢复原先的链表关系?
答:链表的关系的却需要重新建立,没有别的方法,这里只需要重新设置,因为链表是存储在内存中的,每次malloc出来的指针地址不一致,无法存储到文件中,下次继续使用。

2、编辑前,是否需要将整个文件流从文件中都读取至堆里去,连立成一个链表?如果文件很大,大过内存怎么办?
答:文件中存储的是整个链表的信息,你只需要每次读出一个struct就可以了。这个malloc出来的struct中你需要读取一个index的值,然后以这个index的值再建立一个链表,将原来那个malloc出来的struct可以释放,这样就可以不用担心文件很大,怕内存不足的情况。因为即使你的链表再长,一个int值足以表示。如果怕int(4字节)不够,可以用double类型,甚至可以用链表嵌套。

3、如果整个文件都读出至堆中,并关联成了链表,那么修改后用fwrite()再次保存至文件中时,是不是把原来的记录都覆盖了还是在后面追求啊?
答:这里写文件就看你自己是怎么打开文件了。(存储的时候是不是按照struct大小存储还是按照实际数据大小存储)最好的方式是可以随便修改,这种方式最难,因为要考虑到更改的是第几个字节。最简单的方式,直接将文件删除,重新建立,但是这样就必须要将所有数据读取到内存中。

如果你要实现问题2中的方法,则问题3即要做大量的修改。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-09
1、你可以全程保存链表不删除啊,直到主程序结束时再删除链表。
2、文件大小超过物理内存,这种情况下就由操作系统的虚拟内存来接管了,不用你操心
3、要看你打开文件的方式了。我个人建议重新用写模式打开文件,把原文件的内容清空掉,再重新把链表内容写回去。追问

1、我是开打文件来得到链表数据的,就是之前已经中止了代码运行的,后面再进行编辑的。
2、一般物理内存也有个极限啊。。

相似回答