读取数据记录文件并以链表方式存储的C语言代码
时间: 2024-01-20 18:04:41 浏览: 76
假设数据记录文件的每条记录包含两个字段:id 和 name,其中 id 是整数,name 是字符串,每个字段以逗号分隔。以下是读取数据记录文件并以链表方式存储的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表节点结构体
typedef struct ListNode {
int id;
char name[50];
struct ListNode* next;
} ListNode;
// 读取数据记录文件并返回链表头节点
ListNode* readDataFile(char* filename) {
FILE* fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
return NULL;
}
ListNode* head = NULL;
ListNode* tail = NULL;
char line[100];
while (fgets(line, 100, fp) != NULL) {
// 解析记录中的 id 和 name 字段
char* id_str = strtok(line, ",");
char* name_str = strtok(NULL, ",");
int id = atoi(id_str);
char name[50];
strcpy(name, name_str);
// 创建新节点
ListNode* new_node = (ListNode*) malloc(sizeof(ListNode));
new_node->id = id;
strcpy(new_node->name, name);
new_node->next = NULL;
// 将新节点插入链表尾部
if (head == NULL) {
head = new_node;
tail = new_node;
} else {
tail->next = new_node;
tail = new_node;
}
}
fclose(fp);
return head;
}
// 遍历链表并打印节点信息
void printList(ListNode* head) {
for (ListNode* node = head; node != NULL; node = node->next) {
printf("%d,%s\n", node->id, node->name);
}
}
int main() {
ListNode* head = readDataFile("data.csv");
if (head != NULL) {
printList(head);
}
return 0;
}
```
在上面的示例中,readDataFile 函数读取数据记录文件并返回链表头节点,printList 函数遍历链表并打印节点信息。由于链表是动态分配的,需要在使用完毕后手动释放内存,否则会出现内存泄漏。
阅读全文