新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
c語言怎么將鏈表寫入文件
在C語言中,將鏈表寫入文件的方法有很多種,這里我將介紹一種簡單的方法,即使用標(biāo)準(zhǔn)庫函數(shù)fwrite()和fopen()來實現(xiàn),我們需要定義一個鏈表結(jié)構(gòu)體,然后創(chuàng)建一個鏈表,并將其寫入文件,以下是詳細(xì)的步驟:

創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元普定做網(wǎng)站,已為上家服務(wù),為普定各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
1、定義鏈表結(jié)構(gòu)體
#include#include // 定義鏈表節(jié)點結(jié)構(gòu)體 typedef struct Node { int data; // 數(shù)據(jù)域 struct Node *next; // 指針域,指向下一個節(jié)點 } Node;
2、創(chuàng)建鏈表
// 創(chuàng)建一個新的節(jié)點
Node *createNode(int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode>data = data;
newNode>next = NULL;
return newNode;
}
// 向鏈表中添加節(jié)點
void addNode(Node **head, int data) {
Node *newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
} else {
newNode>next = *head;
*head = newNode;
}
}
3、將鏈表寫入文件
// 將鏈表寫入文件的函數(shù)
void writeListToFile(FILE *file, Node *head) {
fwrite(&head, sizeof(Node *), 1, file); // 寫入鏈表頭節(jié)點的地址
Node *current = head; // 初始化當(dāng)前節(jié)點為頭節(jié)點
while (current != NULL) { // 當(dāng)當(dāng)前節(jié)點不為空時,繼續(xù)遍歷鏈表
fwrite(¤t>data, sizeof(int), 1, file); // 寫入當(dāng)前節(jié)點的數(shù)據(jù)域
fwrite(¤t>next, sizeof(Node *), 1, file); // 寫入當(dāng)前節(jié)點的指針域(指向下一個節(jié)點)
current = current>next; // 將當(dāng)前節(jié)點更新為下一個節(jié)點
}
}
4、讀取鏈表并驗證寫入結(jié)果
// 從文件中讀取鏈表的函數(shù)
Node *readListFromFile(FILE *file) {
Node *head = NULL; // 初始化鏈表頭節(jié)點為空
fread(&head, sizeof(Node *), 1, file); // 讀取鏈表頭節(jié)點的地址
head = (Node *)malloc(sizeof(Node)); // 根據(jù)讀取到的地址分配內(nèi)存空間給頭節(jié)點
head>next = NULL; // 初始化頭節(jié)點的指針域為空
Node *current = head; // 初始化當(dāng)前節(jié)點為頭節(jié)點
while (!feof(file)) { // 當(dāng)文件未結(jié)束時,繼續(xù)讀取數(shù)據(jù)
int data; // 臨時存儲讀取到的數(shù)據(jù)域的值
fread(&data, sizeof(int), 1, file); // 讀取數(shù)據(jù)域的值
current>next = (Node *)malloc(sizeof(Node)); // 根據(jù)讀取到的數(shù)據(jù)域的值分配內(nèi)存空間給新節(jié)點
current>next>data = data; // 將讀取到的數(shù)據(jù)域的值賦給新節(jié)點的數(shù)據(jù)域
current>next>next = NULL; // 初始化新節(jié)點的指針域為空
current = current>next; // 將當(dāng)前節(jié)點更新為新節(jié)點
}
return head; // 返回鏈表頭節(jié)點的地址
}
5、主函數(shù),測試鏈表寫入和讀取功能
int main() {
FILE *file = fopen("list.bin", "wb"); // 以二進(jìn)制寫入模式打開文件,用于寫入鏈表數(shù)據(jù)
if (file == NULL) {
printf("無法打開文件!
");
return 1;
}
Node *head = NULL; // 初始化鏈表頭節(jié)點為空
addNode(&head, 1); // 向鏈表中添加一個節(jié)點,數(shù)據(jù)域為1
addNode(&head, 2); // 向鏈表中添加一個節(jié)點,數(shù)據(jù)域為2
addNode(&head, 3); // 向鏈表中添加一個節(jié)點,數(shù)據(jù)域為3
writeListToFile(file, head); // 將鏈表寫入文件
fclose(file); // 關(guān)閉文件句柄
file = fopen("list.bin", "rb"); // 以二進(jìn)制讀取模式打開文件,用于讀取鏈表數(shù)據(jù)(驗證寫入結(jié)果)
if (file == NULL) {
printf("無法打開文件!
");
return 1;
}
head = readListFromFile(file); // 從文件中讀取鏈表數(shù)據(jù),并返回鏈表頭節(jié)點的地址(驗證寫入結(jié)果)
fclose(file); // 關(guān)閉文件句柄
current = head; // 初始化當(dāng)前節(jié)點為頭節(jié)點,用于遍歷鏈表并打印節(jié)點數(shù)據(jù)域的值(驗證寫入結(jié)果)
while (current != NULL) { // 當(dāng)當(dāng)前節(jié)點不為空時,繼續(xù)遍歷鏈表并打印節(jié)點數(shù)據(jù)域的值(驗證寫入結(jié)果)
printf("%d ", current>data); // 打印當(dāng)前節(jié)點的數(shù)據(jù)域的值(驗證寫入結(jié)果)
current = current>next; // 將當(dāng)前節(jié)點更新為下一個節(jié)點(驗證寫入結(jié)果)
}
printf("
"); // 換行(驗證寫入結(jié)果)
return 0; // 程序正常結(jié)束(驗證寫入結(jié)果)
}
分享文章:c語言怎么將鏈表寫入文件
文章URL:http://m.5511xx.com/article/cogsdgj.html


咨詢
建站咨詢
