您好,登錄后才能下訂單哦!
今天小編給大家分享一下C語(yǔ)言怎么實(shí)現(xiàn)鏈表與文件存取的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
int main(void) { char filename[50]; printf("How many ?: "); scanf("%d", &n); /*輸入學(xué)生數(shù)*/ printf("please input filename: "); scanf("%s", filename); /*輸入文件所在路徑及名稱*/ Create(); //調(diào)用函數(shù)建立鏈表 save(filename); //調(diào)用函數(shù)存到文件 free(phead);//釋放phead內(nèi)存 show(filename); //調(diào)用函數(shù)輸出文件 system("pause"); return 0; }
建立鏈表并輸入數(shù)據(jù)到鏈表里
代碼如下:
typedef struct stu { char name[20]; char adr[20]; int tel; struct stu* pnext; } stu; int n; //n存著信息條數(shù) stu* phead=NULL;//phead為鏈表首地址 void Create() //建立鏈表 { stu *pend,*pnew;//尾節(jié)點(diǎn),新節(jié)點(diǎn) pend=phead =(stu*)malloc(sizeof(stu));//分配內(nèi)存給首節(jié)點(diǎn) printf("please first input Name, Adress and telephone:\n"); for(int i=0;i<n;i++) { pnew=(stu*)malloc(sizeof(stu)); //分配新節(jié)點(diǎn) pend->pnext=pnew; //原來(lái)的尾節(jié)點(diǎn)指向新節(jié)點(diǎn) pnew->pnext=NULL; //新節(jié)點(diǎn)的指針為NULL printf("NO.%d: ",i+1); scanf("%s", pend->name); scanf("%s", pend->adr); scanf("%d",&pend->tel); pend=pnew; //賦值后指向尾節(jié)點(diǎn) } pnew=pnew->pnext;//指向NULL free(pnew); //釋放pnew內(nèi)存 }
此處用到了fopen、fprintf、fclose等文件操作函數(shù)
代碼如下:
void save(char *filename) { FILE *w;//文件指針 if ((w = fopen(filename, "wb")) == NULL){ /*二進(jìn)制只寫打開(kāi)文件*/ printf("cannot open file\n"); exit(1); } for (int i = 0; i < n; i++) //鏈表數(shù)據(jù)循環(huán)輸入到文件內(nèi) { fprintf(w,"%s ",phead->name); fprintf(w,"%s ",phead->adr); fprintf(w,"%d", phead->tel); fprintf(w,"%s","\r\n");//換行 phead=phead->pnext;//指向下一個(gè)節(jié)點(diǎn) } fclose(w); //關(guān)閉文件 }
先把文件內(nèi)容保存到結(jié)構(gòu)體數(shù)組內(nèi),然后再通過(guò)數(shù)組輸出到屏幕上。
代碼如下:
void show(char *filename) //輸出文件 { FILE *fp;//文件指針 stu info[100]; //負(fù)責(zé)存放文件中的數(shù)據(jù),然后輸出 if ((fp = fopen(filename, "rb")) == NULL){ /*二進(jìn)制只讀打開(kāi)文件*/ printf("cannot open file\n"); exit(1); } for (int i = 0; i < n; i++) { fscanf(fp,"%s",&(info[i].name));//輸出數(shù)據(jù)到數(shù)組 fscanf(fp,"%s",&(info[i].adr)); fscanf(fp,"%d",&(info[i].tel)); printf("%10s%15s%15d\n", info[i].name, info[i].adr, info[i].tel); //輸出數(shù)據(jù)到屏幕 } fclose(fp); //關(guān)閉文件 }
/*此代碼為《C語(yǔ)言從入門到精通(第二版)》第十四章(文件)的【例14.7】的改進(jìn)版*/ #include<stdio.h> #include<stdlib.h> #include<process.h> typedef struct stu { char name[20]; char adr[20]; int tel; struct stu* pnext; } stu; int n; //n存著信息條數(shù) stu* phead=NULL;//phead為鏈表首地址 void Create()/*建立鏈表*/ { stu *pend,*pnew;//尾節(jié)點(diǎn),新節(jié)點(diǎn) pend=phead =(stu*)malloc(sizeof(stu));//分配內(nèi)存給首節(jié)點(diǎn) printf("please first input Name, Adress and telephone:\n"); for (int i = 0; i < n; i++) { pnew=(stu*)malloc(sizeof(stu)); //分配新節(jié)點(diǎn) pend->pnext=pnew; //原來(lái)的尾節(jié)點(diǎn)指向新節(jié)點(diǎn) pnew->pnext=NULL; //新節(jié)點(diǎn)的指針為NULL printf("NO.%d: ",i+1); scanf("%s", pend->name);//輸入數(shù)據(jù)存到鏈表中 scanf("%s", pend->adr); scanf("%d",&pend->tel); pend=pnew; //賦值后指向尾節(jié)點(diǎn) } pnew=pnew->pnext;//指向NULL free(pnew); //釋放pnew內(nèi)存 } void save(char *filename)/*存到文件內(nèi)*/ { FILE *w;//文件指針 if ((w = fopen(filename, "wb")) == NULL){ /*二進(jìn)制只寫打開(kāi)文件*/ printf("cannot open file\n"); exit(1); } for (int i = 0; i < n; i++) //鏈表數(shù)據(jù)循環(huán)輸入到文件里 { fprintf(w,"%s ",phead->name);//數(shù)據(jù)存入到文件 fprintf(w,"%s ",phead->adr); fprintf(w,"%d", phead->tel); fprintf(w,"%s","\r\n");//換行 phead=phead->pnext;//指向下一個(gè)節(jié)點(diǎn) } fclose(w); //關(guān)閉文件 } void show(char *filename)/*輸出文件*/ { FILE *fp;//文件指針 stu info[100]; //負(fù)責(zé)存放文件中的數(shù)據(jù),然后輸出 if ((fp = fopen(filename, "rb")) == NULL){ /*二進(jìn)制只讀打開(kāi)文件*/ printf("cannot open file\n"); exit(1); } for (int i = 0; i < n; i++) { fscanf(fp,"%s",&(info[i].name));//輸出數(shù)據(jù)到數(shù)組 fscanf(fp,"%s",&(info[i].adr)); fscanf(fp,"%d",&(info[i].tel)); printf("%10s%15s%15d\n", info[i].name, info[i].adr, info[i].tel);//輸出數(shù)據(jù)到屏幕 } fclose(fp);/*關(guān)閉文件*/ } int main(void) { char filename[50]; printf("How many ?:\n"); scanf("%d", &n); /*輸入學(xué)生數(shù)*/ printf("please input filename: "); scanf("%s", filename); /*輸入文件所在路徑及名稱*/ Create(); //調(diào)用函數(shù)建立鏈表 save(filename); //調(diào)用函數(shù)存到文件 free(phead);//釋放phead內(nèi)存 show(filename); //調(diào)用函數(shù)輸出文件 system("pause"); return 0; }
以上就是“C語(yǔ)言怎么實(shí)現(xiàn)鏈表與文件存取”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。