《计算机程序设计基础课程教学.ppt》由会员分享,可在线阅读,更多相关《计算机程序设计基础课程教学.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础乔乔 林林计算机程序设计基础计算机程序设计基础Email:Email:Tel:62780973Tel:62780973清华大学计算机科学与技术系清华大学计算机科学与技术系2清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础第十章 文件与数据存储学习目标学习目标掌握文件的基本概念掌握文件的基本概念掌握文件的基本概念掌握文件的基本概念学会使用常用的文件操作函数进行文件读写学会使用常用的文件操作函数进行文件读写学会使用常用的文件操作函数进行文件读写学
2、会使用常用的文件操作函数进行文件读写会使用文件存储、访问和管理数据会使用文件存储、访问和管理数据会使用文件存储、访问和管理数据会使用文件存储、访问和管理数据3清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础10.1 文件的基本概念数据的保存与持久化数据的保存与持久化在程序结束时数据仍有效在程序结束时数据仍有效在程序结束时数据仍有效在程序结束时数据仍有效文件的定义文件的定义一组相关信息的集合一组相关信息的集合一组相关信息的集合一组相关信息的集合存储于某种存储介质上存储于某种存储介质上存储于某种存储介质上存储于某种存储介质上具有某种特定格式,其中
3、的信息也具有相同的含具有某种特定格式,其中的信息也具有相同的含具有某种特定格式,其中的信息也具有相同的含具有某种特定格式,其中的信息也具有相同的含义,需要用不同的方法存取义,需要用不同的方法存取义,需要用不同的方法存取义,需要用不同的方法存取文件结构体与文件指针文件结构体与文件指针4清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件的类型顺序文件与随机文件顺序文件与随机文件顺序文件:只能顺序访问其中的信息顺序文件:只能顺序访问其中的信息顺序文件:只能顺序访问其中的信息顺序文件:只能顺序访问其中的信息 例:存储在磁带上的文件只能顺序访问例:存
4、储在磁带上的文件只能顺序访问例:存储在磁带上的文件只能顺序访问例:存储在磁带上的文件只能顺序访问随机文件:可以随机访问文件的任一部分信息,随机文件:可以随机访问文件的任一部分信息,随机文件:可以随机访问文件的任一部分信息,随机文件:可以随机访问文件的任一部分信息,可以指定读写位置可以指定读写位置可以指定读写位置可以指定读写位置二进制文件与文本文件二进制文件与文本文件文本文件:信息以字符形式存储,有分行信息,文本文件:信息以字符形式存储,有分行信息,文本文件:信息以字符形式存储,有分行信息,文本文件:信息以字符形式存储,有分行信息,阅读目标为程序员与程序阅读目标为程序员与程序阅读目标为程序员与程
5、序阅读目标为程序员与程序二进制文件:文件以二进制码存储,无分行信息,二进制文件:文件以二进制码存储,无分行信息,二进制文件:文件以二进制码存储,无分行信息,二进制文件:文件以二进制码存储,无分行信息,阅读目标为程序阅读目标为程序阅读目标为程序阅读目标为程序5清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础10.2 基本文件操作文件打开与关闭操作文件打开与关闭操作文件打开与关闭操作文件打开与关闭操作 FILE*FILE*fopenfopen(const char*(const char*filenamefilename,const char*,
6、const char*modemode););int int fclosefclose(FILE*(FILE*fpfp););文件状态与缓冲区操作文件状态与缓冲区操作文件状态与缓冲区操作文件状态与缓冲区操作 int int feoffeof(FILE*(FILE*fpfp););int int fflushfflush(FILE*(FILE*fpfp););文件指针操作文件指针操作文件指针操作文件指针操作 void void rewindrewind(FILE*(FILE*fpfp););int int fseekfseek(FILE*(FILE*fpfp,long,long offsetof
7、fset,int,int fromwherefromwhere););long long ftellftell(FILE*(FILE*fpfp););6清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础10.2 基本文件操作文件读写操作文件读写操作文件读写操作文件读写操作 int int fprintffprintf(FILE*(FILE*fpfp,const char*,const char*fmtfmt,);,);int int fscanffscanf(FILE*(FILE*fpfp,const char*,const char*fmtf
8、mt,);,);int int fgetcfgetc(FILE*(FILE*fpfp););char*char*fgetsfgets(char*(char*strstr,int,int n n,FILE*,FILE*fpfp););int int fputcfputc(int(int chch,FILE*,FILE*fpfp););char char fputsfputs(char*(char*strstr,FILE*,FILE*fpfp););int int freadfread(void*(void*bufbuf,int,int sizesize,int,int countcount,FI
9、LE*,FILE*fpfp););int int fwritefwrite(void*(void*bufbuf,int,int sizesize,int,int countcount,FILE*,FILE*fpfp););7清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件打开操作函数原型函数原型FILE*FILE*fopenfopen(const char*(const char*filenamefilename,const char*,const char*modemode););返回值返回值调用成功返回文件指针,调用成功返回文件指针,
10、调用成功返回文件指针,调用成功返回文件指针,失败返回失败返回失败返回失败返回NULLNULL函数参数函数参数filenamefilename:文件名字符串,可以包含路径名文件名字符串,可以包含路径名文件名字符串,可以包含路径名文件名字符串,可以包含路径名modemode:文件打开模式文件打开模式文件打开模式文件打开模式8清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件打开模式modemode:文件打开模式文件打开模式文件打开模式文件打开模式 r r:读,若文件不存在,返回读,若文件不存在,返回读,若文件不存在,返回读,若文件不存在,返回N
11、ULLNULL ww:写,若文件不存在,创建,若已存在,删除写,若文件不存在,创建,若已存在,删除写,若文件不存在,创建,若已存在,删除写,若文件不存在,创建,若已存在,删除 a a:追加,若文件不存在,创建,若已存在,添加到文件追加,若文件不存在,创建,若已存在,添加到文件追加,若文件不存在,创建,若已存在,添加到文件追加,若文件不存在,创建,若已存在,添加到文件尾部尾部尾部尾部 r r+、ww+:读写,若文件不存在,创建,若已存在,覆盖读写,若文件不存在,创建,若已存在,覆盖读写,若文件不存在,创建,若已存在,覆盖读写,若文件不存在,创建,若已存在,覆盖 a a+:读与追加,若文件不存在创
12、建,若已存在,覆盖读与追加,若文件不存在创建,若已存在,覆盖读与追加,若文件不存在创建,若已存在,覆盖读与追加,若文件不存在创建,若已存在,覆盖 b b:二进制格式二进制格式二进制格式二进制格式示示示示 例例例例“rbrb”:读模式打开二进制文件读模式打开二进制文件读模式打开二进制文件读模式打开二进制文件“ww+”+”:读写模式打开文本文件读写模式打开文本文件读写模式打开文本文件读写模式打开文本文件9清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件打开示例文件打开应用文件打开应用#include#include#include#inclu
13、de int int mainmain()()FILE*FILE*fpfp;char char filenamefilename40,40,modemode4;4;while(1)while(1)/*/*输入文件名和打开方式输入文件名和打开方式输入文件名和打开方式输入文件名和打开方式*/*/printfprintf(“(“n nEnter a filename:“);Enter a filename:“);getsgets(filenamefilename););/*/*输入文件名输入文件名输入文件名输入文件名*/*/printfprintf(“(“n nEnter a mode(max 3
14、characters):“);Enter a mode(max 3 characters):“);getsgets(mode mode););/*/*输入打开方式输入打开方式输入打开方式输入打开方式*/*/10清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件打开示例 /*/*打开文件打开文件打开文件打开文件*/*/if(if(fpfp=fopenfopen(filenamefilename,modemode)!=)!=NULLNULL)printfprintf(“(“n nSuccessful opening%Successful ope
15、ning%s s in mode%in mode%s s.n n“,“,filenamefilename,mode mode););/*/*输出成功信息输出成功信息输出成功信息输出成功信息*/*/fclosefclose(fp fp););/*/*关闭文件关闭文件关闭文件关闭文件*/*/elseelse fprintffprintf(stderrstderr,“,“n nError opening file%Error opening file%s s in mode%in mode%s s.n n“,“,filenamefilename,mode mode););/*/*输出不成功信息输出不
16、成功信息输出不成功信息输出不成功信息*/*/*/*询问是否结束询问是否结束询问是否结束询问是否结束*/*/putsputs(“Enter x to exit,any other to continue.“);(“Enter x to exit,any other to continue.“);if(if(getcgetc(stdinstdin)=x)break;)=x)break;else continue;else continue;11清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础预定义的标准文件标准文件:输入输出流标准文件:输入输出流
17、stdinstdin:标准输入设备,一般为键盘标准输入设备,一般为键盘标准输入设备,一般为键盘标准输入设备,一般为键盘stdoutstdout:标准输出设备,一般为屏幕标准输出设备,一般为屏幕标准输出设备,一般为屏幕标准输出设备,一般为屏幕stderrstderr:标准错误输出设备,一般为屏幕标准错误输出设备,一般为屏幕标准错误输出设备,一般为屏幕标准错误输出设备,一般为屏幕12清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件关闭操作函数原型函数原型关闭单个文件:关闭单个文件:关闭单个文件:关闭单个文件:int int fclosefcl
18、ose(FILE*(FILE*fpfp););关闭除标准文件之外的所有文件:关闭除标准文件之外的所有文件:关闭除标准文件之外的所有文件:关闭除标准文件之外的所有文件:int int fcloseallfcloseall();();文件缓冲区文件缓冲区外部块设备与内部数据流间的接口(中转站)外部块设备与内部数据流间的接口(中转站)外部块设备与内部数据流间的接口(中转站)外部块设备与内部数据流间的接口(中转站)清理文件缓冲区:清理文件缓冲区:清理文件缓冲区:清理文件缓冲区:int int fflushfflush(FILE*(FILE*fpfp););清理所有文件的缓冲区:清理所有文件的缓冲区:清
19、理所有文件的缓冲区:清理所有文件的缓冲区:int int fflushallfflushall();();13清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件关闭示例将磁盘文件中的信息复制到新文件中将磁盘文件中的信息复制到新文件中#include#include void void mainmain()()FILE*FILE*inin,*,*outout;char;char innameinname12,12,outnameoutname12;12;scanfscanf(“%s”,(“%s”,innameinname););scanfsc
20、anf(“%s”,(“%s”,outnameoutname););if(if(inin=fopenfopen(innameinname,“r”)=,“r”)=NULLNULL)exit(0);)exit(0);if(if(outout=fopenfopen(outnameoutname,“w”)=,“w”)=NULLNULL)exit(0);)exit(0);while(!while(!feoffeof(inin)fputcfputc(fgetcfgetc(inin),),outout););fclosefclose(inin););fclosefclose(outout););14清华大学计
21、算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件格式化输入输出操作函数原型函数原型格式化输出:格式化输出:格式化输出:格式化输出:int int fprintffprintf(FILE*(FILE*fpfp,const char*,const char*fmtfmt,);,);格式化输入:格式化输入:格式化输入:格式化输入:int int fscanffscanf(FILE*(FILE*fpfp,const char*,const char*fmtfmt,);,);说说 明明与标准格式化输入输出函数功能基本相同与标准格式化输入输出函数功能基本相同与
22、标准格式化输入输出函数功能基本相同与标准格式化输入输出函数功能基本相同差别:多了文件指针参数,输入源或输出目的均差别:多了文件指针参数,输入源或输出目的均差别:多了文件指针参数,输入源或输出目的均差别:多了文件指针参数,输入源或输出目的均是文件,而不是标准设备是文件,而不是标准设备是文件,而不是标准设备是文件,而不是标准设备 思考:思考:思考:思考:fprintffprintf(stdoutstdout,);=,);=printfprintf();?();?15清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件格式化输出示例将用户输入的将用
23、户输入的 5 5 个浮点数写入文件个浮点数写入文件#include#include#include#include void void clear_kbclear_kb();();int int mainmain()()FILE*FILE*fpfp;float float datadata5;5;int int countcount;char char filenamefilename20;20;putsputs(“Enter 5 floating-point numerical values.“);(“Enter 5 floating-point numerical values.“);fo
24、r(for(countcount=0;=0;countcount5;5;countcount+)+)scanfscanf(“%(“%f f“,&“,&datadata countcount););clear_kbclear_kb();();/*/*清除键盘缓冲区清除键盘缓冲区清除键盘缓冲区清除键盘缓冲区*/*/16清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件格式化输出示例 putsputs(“Enter a name for the file.“);(“Enter a name for the file.“);getsgets(fil
25、ename filename););if(if(fpfp=fopenfopen(filenamefilename,“w“)=,“w“)=NULL NULL)fprintffprintf(stderrstderr,“Error opening file%,“Error opening file%s s.“,.“,filename filename);exit(1););exit(1);/*/*将数据写入文件和标准输出设备将数据写入文件和标准输出设备将数据写入文件和标准输出设备将数据写入文件和标准输出设备stdoutstdout*/*/for(for(countcount=0;=0;countco
26、unt 5;5;countcount+)+)fprintffprintf(fpfp,“,“n ndata%data%d d=%=%f f“,“,countcount,datadata countcount););fprintffprintf(stdoutstdout,“,“n ndata%data%d d=%=%f f“,“,countcount,datadata countcount););fclosefclose(fp fp););printfprintf(“(“n n“);return 0;“);return 0;/*/*清空键盘缓冲区清空键盘缓冲区清空键盘缓冲区清空键盘缓冲区*/*/v
27、oid void clear_kbclear_kb()()char char junkjunk80;80;getsgets(junkjunk););17清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件格式化输入示例从文件中读取从文件中读取 5 5 个浮点数个浮点数#include#include#include#include int int mainmain()()float float f1f1,f2f2,f3f3,f4f4,f5f5;FILE*;FILE*fpfp;if(if(fpfp=fopenfopen(“INPUT.TXT“,
28、“r“)=(“INPUT.TXT“,“r“)=NULLNULL)fprintffprintf(stderrstderr,“Error opening file.,“Error opening file.n n“);exit(1);“);exit(1);fscanffscanf(fpfp,“%,“%f f%f f%f f%f f%f f“,&“,&f1f1,&,&f2f2,&,&f3f3,&,&f4f4,&,&f5f5););printf printf(“The values are%(“The values are%f f,%,%f f,%,%f f,%,%f f,and%,and%f f n
29、 n.“,.“,f1f1,f2f2,f3f3,f4f4,f5f5););fclosefclose(fpfp););return 0;return 0;18清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件字符输入输出操作函数原型函数原型字符输入:字符输入:字符输入:字符输入:int int fgetcfgetc(FILE*(FILE*fpfp););字符串输入:字符串输入:字符串输入:字符串输入:char*char*fgetsfgets(char*(char*strstr,int,int n n,FILE*,FILE*fpfp););字符输
30、出:字符输出:字符输出:字符输出:int int fputcfputc(int(int chch,FILE*,FILE*fpfp););字符串输出:字符串输出:字符串输出:字符串输出:char char fputsfputs(char*(char*strstr,FILE*,FILE*fpfp););说说 明明与标准字符输入输出函数功能相同与标准字符输入输出函数功能相同与标准字符输入输出函数功能相同与标准字符输入输出函数功能相同差别:多了文件指针参数,源或目的均为文件差别:多了文件指针参数,源或目的均为文件差别:多了文件指针参数,源或目的均为文件差别:多了文件指针参数,源或目的均为文件19清华大
31、学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件直接输入输出操作函数原型函数原型函数原型函数原型 直接输入:直接输入:直接输入:直接输入:int int freadfread(void*(void*bufbuf,int,int sizesize,int,int countcount,FILE*FILE*fpfp););直接输出:直接输出:直接输出:直接输出:int int fwritefwrite(void*(void*bufbuf,int,int sizesize,int,int countcount,FILE*FILE*fpfp););说说
32、说说 明明明明 直接输入输出按块操作直接输入输出按块操作直接输入输出按块操作直接输入输出按块操作 freadfread()():从文件从文件从文件从文件 fp fp 中将中将中将中将 count count 块大小为块大小为块大小为块大小为 size size 的连续数据的连续数据的连续数据的连续数据读入缓冲区读入缓冲区读入缓冲区读入缓冲区 bufbuf fwritefwrite()():将缓冲区将缓冲区将缓冲区将缓冲区 buf buf 中中中中 count count 块大小为块大小为块大小为块大小为 size size 的连续数的连续数的连续数的连续数据写入文件据写入文件据写入文件据写入文
33、件 fpfp20清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件直接输入输出示例使用使用 fread()与与 fwrite()进行直接文件访问进行直接文件访问#include#include#include#include#define#define SIZESIZE 20 20int int mainmain()()int int countcount,array1array1 SIZESIZE,array2array2 SIZESIZE;FILE*;FILE*fpfp;/*/*数组初始化数组初始化数组初始化数组初始化*/*/for(f
34、or(countcount=0;=0;countcount SIZESIZE;countcount+)+)array1array1 countcount=2*=2*countcount;/*/*打开一个二进制文件准备写入数据打开一个二进制文件准备写入数据打开一个二进制文件准备写入数据打开一个二进制文件准备写入数据*/*/if(if(fpfp=fopenfopen(“direct.txt“,“wb“)=(“direct.txt“,“wb“)=NULL NULL)fprintffprintf(stderrstderr,“Error opening file.“);exit(1);,“Error o
35、pening file.“);exit(1);21清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础文件直接输入输出示例 /*/*将数组将数组将数组将数组array1array1 存入文件存入文件存入文件存入文件*/*/if(if(fwritefwrite(array1array1,sizeof(int),sizeof(int),SIZESIZE,fpfp)!=)!=SIZE SIZE)fprintffprintf(stderrstderr,“Error writing to file.“);exit(1);,“Error writing to
36、 file.“);exit(1);fclosefclose(fp fp););/*/*以二进制读方式打开文件以二进制读方式打开文件以二进制读方式打开文件以二进制读方式打开文件*/*/if(if(fpfp=fopenfopen(“direct.txt“,“rb“)=(“direct.txt“,“rb“)=NULLNULL)fprintffprintf(stderr,“Error opening file.“);exit(1);(stderr,“Error opening file.“);exit(1);/*/*从文件读取数据到从文件读取数据到从文件读取数据到从文件读取数据到array2array
37、2 中中中中*/*/if(if(freadfread(array2array2,sizeof(int),sizeof(int),SIZESIZE,fpfp)!=)!=SIZE SIZE)fprintffprintf(stderrstderr,“Error reading file.“);exit(1);,“Error reading file.“);exit(1);fclosefclose(fp fp););/*/*同时显示两个数组同时显示两个数组同时显示两个数组同时显示两个数组*/*/for(for(countcount=0;=0;countcount SIZESIZE;countcount
38、+)+)printfprintf(“%(“%d d t t%d d n n“,“,array1array1 countcount,array2array2 countcount););return 0;return 0;22清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础10.3 文件应用示例如何将链表中的信息依次存入文件,然后再如何将链表中的信息依次存入文件,然后再从文件中读出这些信息,恢复为链表从文件中读出这些信息,恢复为链表/childrenlistchildrenlist.h h#include#include#include#inc
39、ludetypedef struct Child float typedef struct Child float heightheight;float;float weightweight;int;int ageage;char char gendergender;struct Child*struct Child*nextnext;ChildNode;ChildNode;void void inputChildinputChild(ChildNode*(ChildNode*child child););ChildNode*ChildNode*createListcreateList(int
40、(int n n););ChildNode*ChildNode*createSortedListcreateSortedList(int(int n n););void void printListprintList(ChildNode*(ChildNode*childchild););void void saveListsaveList(FILE*(FILE*fpfp,ChildNode*,ChildNode*child child););ChildNode*ChildNode*getListgetList(FILE*(FILE*fpfp););23清华大学计算机科学与技术系清华大学计算机科
41、学与技术系http:/计计算算机机程程序序设设计计基基础础10.3 文件应用示例/childrenlistchildrenlist.c c#include“childrenlist.h“#include“childrenlist.h“void void inputChildinputChild(ChildNode*(ChildNode*childchild)/结点数据输入函数结点数据输入函数结点数据输入函数结点数据输入函数 printfprintf(“Age:“);(“Age:“);scanfscanf(“%(“%d d“,&“,&childchild ageage););getcharget
42、char();();printfprintf(“Gender:“);(“Gender:“);scanfscanf(“%(“%c c“,&“,&childchild gendergender););printfprintf(“Height:“);(“Height:“);scanfscanf(“%(“%f f“,&“,&childchild heightheight););printfprintf(“Weight:“);(“Weight:“);scanfscanf(“%(“%f f“,&“,&childchild weightweight););24清华大学计算机科学与技术系清华大学计算机科学与技
43、术系http:/计计算算机机程程序序设设计计基基础础10.3 文件应用示例ChildNode*ChildNode*createListcreateList(int(int n n)/生成链表生成链表生成链表生成链表 ChildNode*ChildNode*p p,*,*childchild;int;int i i;/建立一个空的头结点建立一个空的头结点建立一个空的头结点建立一个空的头结点 child child=(ChildNode*)=(ChildNode*)mallocmalloc(sizeof(ChildNode);(sizeof(ChildNode);childchild next n
44、ext=NULLNULL;/初始化指针域初始化指针域初始化指针域初始化指针域 for(for(i i=n n;i i 0;0;i i)/依次建立并向表头插入结点依次建立并向表头插入结点依次建立并向表头插入结点依次建立并向表头插入结点 /创建新结点创建新结点创建新结点创建新结点 p p=(ChildNode*)=(ChildNode*)mallocmalloc(sizeof(ChildNode);(sizeof(ChildNode);inputChild inputChild(p p);/);/输入数据到新结点输入数据到新结点输入数据到新结点输入数据到新结点 /将新结点插入到表头结点之后将新结点
45、插入到表头结点之后将新结点插入到表头结点之后将新结点插入到表头结点之后 p p next next=childchild nextnext;childchild next next=p p;return return childchild;25清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础10.3 文件应用示例ChildNode*ChildNode*createSortedListcreateSortedList(int(int n n)/生成有序链表生成有序链表生成有序链表生成有序链表 ChildNode*ChildNode*p p,*,
46、*q q,*,*childchild;int;int i i;child child=(ChildNode*)=(ChildNode*)mallocmalloc(sizeof(ChildNode);(sizeof(ChildNode);/头结点头结点头结点头结点 childchild next next=NULLNULL;/初始化指针域初始化指针域初始化指针域初始化指针域 for(for(i i=n n;i i 0;0;i i)/依次建立并向表头插入结点依次建立并向表头插入结点依次建立并向表头插入结点依次建立并向表头插入结点 p p=(ChildNode*)=(ChildNode*)mallo
47、cmalloc(sizeof(ChildNode);(sizeof(ChildNode);/创建结点创建结点创建结点创建结点 inputChild inputChild(p p););/输入数据到新结点输入数据到新结点输入数据到新结点输入数据到新结点 q q=childchild;/查找新结点的插入位置查找新结点的插入位置查找新结点的插入位置查找新结点的插入位置 while(while(q q next next!=!=NULLNULL&p p age age q q nextnext age age)q q=q q nextnext;p p next next=q q nextnext;q
48、q next next=p p;/插入新结点插入新结点插入新结点插入新结点 return return childchild;26清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础10.3 文件应用示例void void printListprintList(ChildNode*(ChildNode*childchild)/遍历并输出链表遍历并输出链表遍历并输出链表遍历并输出链表 ChildNode*ChildNode*currentcurrent;currentcurrent=childchild;/遍历指针初始状态指向表头遍历指针初始状态指
49、向表头遍历指针初始状态指向表头遍历指针初始状态指向表头 while(while(currentcurrent next next!=!=NULL NULL)current current=currentcurrent nextnext;/当前指针移动到下一个结点当前指针移动到下一个结点当前指针移动到下一个结点当前指针移动到下一个结点 /输出当前结点数据输出当前结点数据输出当前结点数据输出当前结点数据 printfprintf(“Age%(“Age%d d t t“,“,currentcurrent age age););printfprintf(“Gender%(“Gender%c c t t
50、“,“,currentcurrent gender gender););printfprintf(“Height%(“Height%f f t t“,“,currentcurrent height height););printfprintf(“Weight%(“Weight%f f n n“,“,currentcurrent weight weight););27清华大学计算机科学与技术系清华大学计算机科学与技术系http:/计计算算机机程程序序设设计计基基础础10.3 文件应用示例void void saveListsaveList(FILE*(FILE*fpfp,ChildNode*,C