本关任务:编写二个函数,分别实现将链表的数据元素写入到文件中,和将文件中的数据元素读入到链表 函数原型:status SaveList(LinkList L,char FileName[]) 功能说明:如果链表L不存在,返回不可行;否则将链表L的全部元素写入到文件名为文件名的文件中,返回OK。函数原型:status LoadList(LinkList &L,char FileName[]) 功能说明:如果链表L存在,表示L中已经有数据,读入数据会覆盖原数据造成数据丢失,返回不可行;否则将文件名为文件名的数
时间: 2024-03-01 22:54:30 浏览: 198
C++实现公交线路图的构建和查询完整代码
据文件中的数据读入到链表L中,返回OK。
以下是两个函数的实现代码:
```c++
#include <stdio.h>
#include <stdlib.h>
#include "LinkList.h" // 假设链表的头文件为 LinkList.h
// 将链表的数据元素写入到文件中
status SaveList(LinkList L, char FileName[]) {
if (L == NULL) {
return ERROR;
}
FILE* fp = fopen(FileName, "wb"); // 以二进制方式打开文件
if (fp == NULL) {
return ERROR;
}
int len = 0; // 链表长度
LinkList p = L;
while (p != NULL) {
len++;
p = p->next;
}
fwrite(&len, sizeof(int), 1, fp); // 先写入链表的长度
p = L;
while (p != NULL) {
fwrite(p->data, sizeof(DataType), 1, fp); // 写入每个节点的数据元素
p = p->next;
}
fclose(fp);
return OK;
}
// 将文件中的数据元素读入到链表中
status LoadList(LinkList& L, char FileName[]) {
if (L != NULL) {
return ERROR;
}
FILE* fp = fopen(FileName, "rb"); // 以二进制方式打开文件
if (fp == NULL) {
return ERROR;
}
int len; // 链表长度
fread(&len, sizeof(int), 1, fp); // 先读取链表的长度
L = (LinkList)malloc(sizeof(LNode)); // 创建头节点
L->next = NULL;
LinkList p = L;
for (int i = 0; i < len; i++) {
LinkList q = (LinkList)malloc(sizeof(LNode)); // 创建新节点
fread(q->data, sizeof(DataType), 1, fp); // 读取节点的数据元素
q->next = NULL;
p->next = q;
p = q;
}
fclose(fp);
return OK;
}
```
注意事项:
1. 在写入文件时,需要先将链表的长度写入文件,这样在读取文件时可以先读取链表的长度,再根据长度创建链表并读取每个节点的数据元素。
2. 在读取文件时,需要创建头节点,并在头节点之后插入读取的每个节点。
3. 以上代码没有进行错误处理和内存释放,实际应用中需要加上这些内容。
阅读全文