付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*直接i+1个节点法排序,思路为“在已排好序的i个节点中寻找合适的位置,将第,i: 1N-1”*/Node * ListSort(Node *head) / 前面的函数与调用语句要作相应修改if(head = NULL) return NULL;Node *pre_j; / 已排序部分的点前节点for(Node *pre_i = head; pre_i-next != NULL; )/ pre_i 未排序部分的待插节点前节点,即已排序尾节点for(Node *pj = head; pj != pre_i-next; pre_j = pj, pj = pj - next)/ pj 指向已排序部
2、分/ q 指向待插节点/ pre_i 后移一个节点if(pre_i-next-data data)Node *q = pre_i - next;pre_i-next = q - next ;if(pj = head) elseq - next = pj;goto LOOP;head = q;pre_j - next = q;if(pre_i - next) LOOP: ;完6这个节点后,继续考虑2pre_i = pre_i - next; /1return head;5 4 0 6 2文件File2014.12刘奇志Part 5文件(File)3Chapter 12文件文件概述文件类型指针文件
3、的打开文件的读/写操作文件的关闭4文件概述计算机中的文件是一种数据集合,每个文件由若干个数据项序列组成,操作系统将其组织在特定的文件夹(或称作目录)中,可以保存。每个文件由“文件名.扩展名”来标识,扩展名通常有13个字母,比如 “文件名.c”表示C程序的源文件, “文件名.exe”表示可执行文件, “文件名.txt”表示文本文件, “文件名.dat”表示数据文件,“文件名.jpg”表示一种图像的压缩数据文件,5在C语言中,文件被看作外存设备中的一段字节串(流式文件)。根据文件的方式可以将文件分为:(1)二进制文件(binary)。比如,对于32位机,整数365存为字节串按二进制数00 00 0
4、1 6d节串。节串,整数2147483647存为7f(2)文本文件(text)字节串按字符的ASCII码。比如,对于32位机,整数365存为33 36 35三个字节串,整数2147483647存为32 3134 37 34 38 33 36 34 37十个字节串。6根据文件的内容信息又可以将文件分为:程序文件(长期保存的程序代码)数据文件(长期保存的程序处理对象或处理结果)设备文件(C语言将输入/输出设备也当成文件来处理)7C语言对文件的操作(即对文件的)通常是按字节为顺序进行的,包括:输入:又叫读操作,一般指从外存设备将数据逐个字节读入内存输出:又叫写操作,一般指将内存的数据逐个字节写至外存
5、设备8C程序的文件往往是外部设备或位于外存中,其速度比内存速度低得多,为了减少时间,提高程序运行效率,C语言采用缓冲文件系统机制,一次读/写一批数据,以减少对外设或外存的读/写次数。缓冲区的大小由具体的系统确定。读磁盘文件写9内存输入文件缓冲区输出文件缓冲区程序数据区文件类型指针C语言为了对文件进行有效管理,在头文件stdio.h中定义了一个名为FILE的结构类型。对于每一个要操作的文件,都必须定义一个FILE类型的指针变量,并使它指向“文件信息描述区”,以便对文件进行读/写操作。10typedef structshort level;/缓冲区满空程度 unsigned flags;/文件状态
6、标志char fd;/文件描述符 unsigned char hold;/无缓冲则不字符 short bsize;/缓冲区大小 unsigned char *buffer;/数据缓冲区 unsigned char *curp;/当前位置指针/每读入/写出一个字节,自动自增1unsigned istemp;/临时文件指示器 short token;/用于有效性检查FILE;对文件进行读/写操作前要打开文件,读/写完毕后要关闭文件。“文件信息描述区”由系统在程序打开文件的时候自动创建。文件的打开、读/写操作、关闭等环节需要调用相应的库函数。11文件的打开在对文件进行读写操作前,要先打开文件,以便为
7、文件建立“文件信息描述区”,即用程序具体文件之间建立联系。一个表示文件的变量与外部一个文件的打开是通过库函数fopen实现的,其原型为:FILE *fopen(const char *filename, const char*mode);参数filename是要打开的文件名(包括路径);参数mode是文件的处理模式,它可以是:1213打开模式描述r只读,打开已有文件,不能写w只写,创建或打开,覆盖已有文件a追加,创建或打开,在已有文件末尾追加r+读写,打开已有文件w+读写,创建或打开,覆盖已有文件a+读写,创建或打开,在已有文件末尾追加t按文本方式打开 (缺省)b按二进制方式打开如果成功打开文
8、件,则函数fopen的返回值为被打开文件信息描述区的地址,否则返回空指针。比如,FILE *pfile = fopen(d:datafile1.txt, w); if(pfile = NULL)pr elseprf(Error! n);f(“file1.txs been opened. n”);14在DOS和Windows等操作系统上,对于按文本方式打开的文件,其中ASCII码为0 x1A的字符(对应于输入 Ctrl+Z,在UNIX操作系统上,对应于输入Ctrl+D,其 ASCII码为0 x0D)被当作文件结束符。文件结束符在程序中通常用EOF(end of file)表示,它是系统在头文件s
9、tdio.h中定义的宏名,可以作为文件结束标志。不同的系统,EOF代表的值不一定相同,用EOF代表能增强程序的可移植性,一般有:# define EOF -115文件的读/写操作文件的读/写操作也是通过库函数实现的,常用文件操作库函数有函数功能fprf格式化输出fscanf格式化输入fwrite输出数据块fread输入数据块16函数功能fp输出字符fgetc输入字符fputs输出字符串fgets输入字符串fgetc(FILE *stream);该函数的功能是从文件stream读入一个字符,正常情况下返回字符的ASCII码,否则返回EOF。char *fgets(char *s,n, FILE
10、*stream);该函数的功能是从文件stream读入一个长度为n的字符串至s,正常情况下返回s,否则返回空指针。fscanf(FILE *stream, const char *format, );该函数的功能是从文件stream读入基本类型的数据,正常情况下返回读入数据的个数,否则返回EOF。参数format的含义类似scanf函数的参数。size_t fread(const void *ptr, size_t size, size_t nmemb, FILE*stream);该函数的功能是从文件stream将nmemb个字节块的数据按字节读入ptr,返回实际读入ptr字节块的个数。siz
11、e_t是在头文件stddef.h中定义的类型,相当于unsigned。参数size为字节块的大小。17fp(c, FILE *stream);该函数的功能是将字符c写至文件stream,正常情况下返回字符c的ASCII码,否则返回EOF。fputs(const char *s, FILE *stream);该函数的功能是将字符串s写至文件stream,正常情况下返回一个非负整数,否则返回EOF。fprf(FILE *stream, const char *format, .);该函数的功能是将基本类型数据写至文件stream,正常情况下返回传输的字符个数,否则返回一个负数。参数format与p
12、rf函数的参数类似。size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE*stream);该函数的功能是按字节将ptr指向的nmemb个字节块的数据写至文件stream,正常情况下返回实际写至文件的字节块的个数。18FILE *fp;i;struct stu sNUM;。fp = fopen(students.dat, rb+);for (i=0; iNUM; i+)fwrite(s+i, sizeof(struct stud), 1, fp); for (i=0; iNUM; i+)fread(s+i, sizeof(s
13、truct stud), 1, fp);fclose(fp);19size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);功能:按字节将ptr指向的nmemb个字节块的数据写至文件stream,正常情况下返回实际写至文件的字节块的个数。size_t fread(const void *ptr, size_t size, size_t nmemb, FILE *stream);功能:从文件stream将nmemb个字节块的数据按字节读入ptr,返回实际读入 ptr字节块的个数。size_t是在头文件 stdd
14、ef.h中定义的类型,相当于 unsigned。参数size为字节块的大小文件的定位文件位置指针位置指针指向当前读写的位置每次读写文件,位置指针都会相应移动可以通过相关函数强制修改位置指针相关函数 rewind函数 fseek函数fl函数20一般情况下,文件的读/写操作是顺序进行的,即,在进行读操作时,如果要读文件中的第n个字节,则必须先读前n-1个字节;在进行写操作时,如果要写第n个字节,则也必须先写前n-1个字节。这种文件的高。方式效率往往不每个打开的文件都有一个位置指针,指向当前读/写位置,每读/写一个字符,文件的位置指针都会自动往后移动一个位置。文件位置指针还可以用库函数来显式指定:f
15、seek(FILE *stream, long offset,whence);该函数的功能是将文件位置指针指向位置whence + offset,参数whence指出参考位置,其取值可以为SEEK_SET(系统定义的值为0的宏,表示文件头),SEEK_CUR(系统定义的值为1的宏,表示当前位置)或SEEK_END(系统定义的值为2的宏,表示文件末尾),参数offset偏移参考位置的字节数,它可以为正值(向后偏移)或负值(向前偏移)。比如,fseek(pfile, 10, SEEK_SET);fseek(pfile, 10, SEEK_CUR);fseek(pfile, -10, SEEK_EN
16、D);/位置指针移至第11个字节处/位置指针从当前位置向后移动10个字节/位置指针移至倒数第10个字节处fseek函数成功执行时返回0,否则返回非0整数。21文件位置指针的当前位置可以通过库函数获得:long fl(FILE *stream);/返回位置指针的位置也可以用库函数将文件位置指针拉回到文件头部:void rewind(FILE *stream); fseek(stream, 0, SEEK_SET)/等价于22feof(FILE *stream);该函数的功能是判断文件是否结束,如果文件结束(即文件位置指针在文件末尾)返回非0整数,否则返回0。23上述函数中fp、fputs、fpr
17、f主要用于以文本方式写数据,fwrite用于以二进制方式写数据。当从文件中读数据时,必须事先知道文件中数据的类型和文件的方式(文本方式或二进制方式)等,否则无法正确进行读操作。比如,i = 365;fprf(pfile, %d, i);/产生文本文件fscanf(pfile, %d, &i);/用“fread(&i, sizeof(i), 1, pfile);”不能正确读数据i = 365;fwrite(&i, sizeof(i), 1, pfile);fread(&i, sizeof(i), 1, pfile);/产生二进制文件/用“fscanf(pfile, ”%d“, &i);”不能正确
18、读数据24文件的关闭文件的相关操作之后,应及时关闭文件,以缓冲区的空间。关闭文件时,系统先将输出文件缓冲区的内容都写入文件(无论缓冲区是否为满),然后关闭文件,这样可防止丢失本来应写入文件的数据。文件的关闭是通过库函数fclose实现的,fclose函数的原型为:fclose(FILE *pfile);参数pfile是要关闭的文件信息描述区指针。如果成功关闭文件,则函数fclose的返回值为0,否则返回EOF。25FILE *fp;char file =D:USERSTUDENTS.DAT;if (!(fp=fopen(file, rb+)prf(Open file %s error!n, file);exit(0);. .f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年银川市兴庆区街道办人员招聘笔试试题及答案解析
- 2026年广东省江门市街道办人员招聘考试模拟试题及答案解析
- 2025年山东省烟台市幼儿园教师招聘考试试题及答案解析
- 2026年湖北省荆州市幼儿园教师招聘笔试备考题库及答案解析
- 2026年伊春市上甘岭区街道办人员招聘笔试模拟试题及答案解析
- 2026年安徽省合肥市幼儿园教师招聘笔试备考试题及答案解析
- 2026年江西省吉安市幼儿园教师招聘笔试参考题库及答案解析
- 2026年商丘市梁园区街道办人员招聘考试参考试题及答案解析
- 2026年鹤壁市山城区街道办人员招聘考试参考试题及答案解析
- 2026年淮南市谢家集区街道办人员招聘考试参考试题及答案解析
- 2023-2024学年广东深大附中九年级(上)期中语文试题及答案
- 延后发工资协议书
- 2025年开封大学单招职业技能测试题库附答案
- TCSEE0338-2022火力发电厂电涡流式振动位移传感器检测技术导则
- 帕金森病震颤症状及护理建议
- 安徽省公务员2025年公共基础真题汇编卷
- 冷链食品安全检查表模板
- 宁夏石化苯罐和抽提原料罐隐患治理项目报告表
- 消除艾梅乙培训课件
- CRT2000 消防控制室图形显示装置-使用说明书-V1.0
- 人体首剂最大安全起始剂量的估算
评论
0/150
提交评论