C语言里怎样引用文件里的动态链表头地址啊?(详细情形)

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:40:27
先做一个函数将一个动态链表存到一个文件里,要怎样在以后调用首地址

链表是数据在内存中的组织形式,而文件是数据在硬盘上的组织形式。所以,当程序把数据存到硬盘上并退出后或者清除链表内存后,原先链表的信息在内存中就消失了。
因此,在之后需要用到原先链表中的数据,你的第一步工作是恢复数据到内存中,即是重组这个链表,当然,如果你的程序是持续运行的,你可以继续使用你原先放链表的内存空间,用这个方法不需要变化链表的首地址。但对于更通常的情形是:你重新申请一块内存空间,再把数据从文件读回来,这时你申请的这块(或者是第一块申请的空间的首地址)即是你以后的链头调用地址。

一个伪代码是:(代码中无错误保护)
保存链表:
void SaveChain(Chain* ChainHead)
{
FILE * DataFile = fopen(...)
Chain *pPos = ChainHead;//从头开始保存
whlie(pPos)
{
...//save this block's data to file
pPos = pPos->next;//转到下一块
}
fclose(..);
}
读回链表,其返回值就是你要的链头地址
Chain * GetDataChainFromFile(char*FileName)
{
Chain *pHead = NULL;//保存作为返回值的链头地址
Chain *pBlock;//块指针,用于申请内存
Chain *pPrePos=NULL;//保存先前位置
FILE *DataFile = fopen(...)
while(there are data to read)
{
pBlock = new ...//申请内存
...//读取文件中一块的数据
if(pHead == NULL)//链头未赋值
pHead = pBlock;//这就是链头了
if(pPrePos) pPrePos->Next = pBlock;//把一块块“链接”起来
pPrePos = pBlock;//更新链接位置