创建链表并将信息存储在二进制文件中是一种常见的数据持久化方法,下面是一些步骤和示例代码:
步骤一:定义链表节点结构体和链表结构体
struct Node {
int data;
struct Node* next;
};
struct LinkedList {
struct Node* head;
int size;
};
步骤二:实现链表的基本操作,包括插入节点、删除节点、查找节点和打印链表等操作
下面是一些示例代码实现:
void insertNode(struct LinkedList* list, int value) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = NULL;
if (list->head == NULL) {
list->head = newNode;
} else {
struct Node* currNode = list->head;
while (currNode->next != NULL) {
currNode = currNode->next;
}
currNode->next = newNode;
}
list->size += 1;
}
void deleteNode(struct LinkedList* list, int value) {
struct Node* currNode = list->head;
struct Node* prevNode = NULL;
while (currNode != NULL) {
if (currNode->data == value) {
if (prevNode == NULL) {
list->head = currNode->next;
} else {
prevNode->next = currNode->next;
}
free(currNode);
list->size -= 1;
return;
}
prevNode = currNode;
currNode = currNode->next;
}
}
struct Node* findNode(struct LinkedList* list, int value) {
struct Node* currNode = list->head;
while (currNode != NULL) {
if (currNode->data == value) {
return currNode;
}
currNode = currNode->next;
}
return NULL;
}
void printList(struct LinkedList* list) {
struct Node* currNode = list->head;
while (currNode != NULL) {
printf("%d ", currNode->data);
currNode = currNode->next;
}
printf("\n");
}
步骤三:将链表信息存储在二进制文件中
我们可以使用 fwrite()
函数将链表信息存储在二进制文件中,每个节点的数据类型需要转换为二进制数据类型。
void saveListToFile(struct LinkedList* list, const char* fileName) {
FILE* fp = fopen(fileName, "w+b");
if (fp == NULL) {
printf("Error: cannot open file %s.\n", fileName);
return;
}
struct Node* currNode = list->head;
while (currNode != NULL) {
fwrite(&(currNode->data), sizeof(int), 1, fp);
currNode = currNode->next;
}
fclose(fp);
}
步骤四:从二进制文件中读取链表信息
我们使用 fread()
函数从文件中读取链表信息,每个节点的数据类型需要转换为对应的数据类型。
void loadListFromFile(struct LinkedList* list, const char* fileName) {
FILE* fp = fopen(fileName, "rb");
if (fp == NULL) {
printf("Error: cannot open file %s.\n", fileName);
return;
}
int value = 0;
while (fread(&value, sizeof(int), 1, fp) == 1) {
insertNode(list, value);
}
fclose(fp);
}
示例一:将链表信息存储在文件中并打印出来
int main() {
struct LinkedList list1 = {NULL, 0};
insertNode(&list1, 1);
insertNode(&list1, 2);
insertNode(&list1, 3);
insertNode(&list1, 4);
printList(&list1);
saveListToFile(&list1, "list.bin");
struct LinkedList list2 = {NULL, 0};
loadListFromFile(&list2, "list.bin");
printList(&list2);
return 0;
}
输出:
1 2 3 4
1 2 3 4
示例二:从文件中读取链表信息并删除某个节点后再将链表信息重新存储到文件中
int main() {
struct LinkedList list = {NULL, 0};
loadListFromFile(&list, "list.bin");
deleteNode(&list, 3);
printList(&list);
saveListToFile(&list, "list.bin");
return 0;
}
输出:
1 2 4
这些是创建链表并将信息存储在二进制文件中读取的实例代码的完整攻略,通过这些代码,我们可以了解如何使用 C 语言实现链表和文件操作的基本知识。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 创建链表并将信息存储在二进制文件中读取的实例代码 - Python技术站