C言語でファイルをリンクリストに読み込む方法を教えてください。
ファイルからLinkedListにデータを読み込むには、以下の手順に従う必要があります。
- ファイルを開く
FILE *fp;
fp = fopen("filename", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
- リンクリストのノード構造体を作成:必要に応じて、格納する必要があるデータと次のノードへのポインタを含むリンクリストのノード構造体を作成します。
typedef struct Node {
int data; // 假设存储整数数据
struct Node *next;
} Node;
- 連結リストのヘッダノードの定義:連結リストのヘッダを指し示すポインタを作成し、NULL に初期化する。
Node *head = NULL;
- fscanf
int num;
while (fscanf(fp, "%d", &num) != EOF) {
// 创建新的节点并存储数据
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = num;
newNode->next = NULL;
// 将新节点插入链表
if (head == NULL) {
head = newNode;
} else {
Node *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
- fclose
fclose(fp);
コード例全体は次のとおりです。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
int main() {
FILE *fp;
fp = fopen("filename", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 0;
}
Node *head = NULL;
int num;
while (fscanf(fp, "%d", &num) != EOF) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = num;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
fclose(fp);
// 遍历链表并输出
Node *temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
// 释放链表内存
temp = head;
while (temp != NULL) {
Node *next = temp->next;
free(temp);
temp = next;
}
return 0;
}
ファイル名を実際に読み込むファイル名に変更し、メモリリークを防ぐために、リンクリストを走査してすべてのノードのメモリを解放する必要があることに注意してください。