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

我已经知道链表内的数据如何保存到文件中去了,现在有几个东西有点乱,请哪位达人给教下。先说一下我自己的办法。首先要读取一个用链表存储成的文件,先建立一个与之相对应的结构体,... 我已经知道链表内的数据如何保存到文件中去了,现在有几个东西有点乱,请哪位达人给教下。
先说一下我自己的办法。
首先要读取一个用链表存储成的文件,先建立一个与之相对应的结构体,然后以"r"模式下打开文件,一个一个把结构体读出来,再用malloc分配至堆中去,直至EOF.然后对堆中的数据进行相应的修改操作.全部修改完后,再将堆中的数据一个一个存回文件中去?然后我有这么几个问题.
1、链表存到文件中去后,再取出来是不是要再次对各个元素进行链表的关联(就是下一个元素地址赋予前一个元素中的地址变量中)?有没有更简单的方法让其自动恢复原先的链表关系?
2、编辑前,是否需要将整个文件流从文件中都读取至堆里去,连立成一个链表?如果文件很大,大过内存怎么办?
3、如果整个文件都读出至堆中,并关联成了链表,那么修改后用fwrite()再次保存至文件中时,是不是把原来的记录都覆盖了还是在后面追求啊?
展开
 我来答
LeoMiaoX
2011-12-15 · TA获得超过289个赞
知道答主
回答量:188
采纳率:100%
帮助的人:64.8万
展开全部
1、链表存到文件中去后,再取出来是不是要再次对各个元素进行链表的关联(就是下一个元素地址赋予前一个元素中的地址变量中)?有没有更简单的方法让其自动恢复原先的链表关系?
答:链表的关系的却需要重新建立,没有别的方法,这里只需要重新设置,因为链表是存储在内存中的,每次malloc出来的指针地址不一致,无法存储到文件中,下次继续使用。

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

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

如果你要实现问题2中的方法,则问题3即要做大量的修改。
忘至白葬不情必0T
2011-12-09 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
1、你可以全程保存链表不删除啊,直到主程序结束时再删除链表。
2、文件大小超过物理内存,这种情况下就由操作系统的虚拟内存来接管了,不用你操心
3、要看你打开文件的方式了。我个人建议重新用写模式打开文件,把原文件的内容清空掉,再重新把链表内容写回去。
追问
1、我是开打文件来得到链表数据的,就是之前已经中止了代码运行的,后面再进行编辑的。
2、一般物理内存也有个极限啊。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式