欢迎来到天天文库
浏览记录
ID:25467491
大小:236.00 KB
页数:68页
时间:2018-11-20
《清华严蔚敏《数据结构》-的全部代码实现C语言》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、./*c1.h(程序名)*/#include#include#include/*malloc()等*/#include/*INT_MAX等*/#include/*EOF(=^Z或F6),NULL*/#include/*atoi()*/#include/*eof()*/#include/*floor(),ceil(),abs()*/#include2、h>/*exit()*//*函数结果状态代码*/#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1/*#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/typedefintStatus;/*Status是函数的类型,其值是函数结果状态代码,如OK等*/typedefintBoolean;/*Boolean是布尔类型,其值是TRUE或FALSE*/..../*algo2-1.3、c实现算法2.1的程序*/#include"c1.h"typedefintElemType;#include"c2-1.h"/*c2-1.h线性表的动态分配顺序存储结构*/#defineLIST_INIT_SIZE10/*线性表存储空间的初始分配量*/#defineLISTINCREMENT2/*线性表存储空间的分配增量*/typedefstruct{ElemType*elem;/*存储空间基址*/intlength;/*当前长度*/intlistsize;/*当前分配的存储容量(以sizeof(Elem4、Type)为单位)*/}SqList;#include"bo2-1.c"/*bo2-1.c顺序表示的线性表(存储结构由c2-1.h定义)的基本操作(12个)*/StatusInitList(SqList*L)/*算法2.3*/{/*操作结果:构造一个空的顺序线性表*/(*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!(*L).elem)exit(OVERFLOW);/*存储分配失败*/(*L).length=0;/*空表长度为5、0*/(*L).listsize=LIST_INIT_SIZE;/*初始存储容量*/returnOK;}StatusDestroyList(SqList*L){/*初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L*/free((*L).elem);(*L).elem=NULL;(*L).length=0;(*L).listsize=0;returnOK;}StatusClearList(SqList*L){/*初始条件:顺序线性表L已存在。操作结果:将L重置为空表*/(*L).length=0;r6、eturnOK;}StatusListEmpty(SqListL)....{/*初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE*/if(L.length==0)returnTRUE;elsereturnFALSE;}intListLength(SqListL){/*初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数*/returnL.length;}StatusGetElem(SqListL,inti,ElemType*e){/*初始条件:顺序线性表L已存7、在,1≤i≤ListLength(L)*//*操作结果:用e返回L中第i个数据元素的值*/if(i<18、9、i>L.length)exit(ERROR);*e=*(L.elem+i-1);returnOK;}intLocateElem(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType)){/*初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)*//*操作结果:返回L中第1个与e满足关系compare()的数据元素的10、位序。*//*若这样的数据元素不存在,则返回值为0。算法2.6*/ElemType*p;inti=1;/*i的初值为第1个元素的位序*/p=L.elem;/*p的初值为第1个元素的存储位置*/while(i<=L.length&&!compare(*p++,e))++i;if(i<=L.length)returni;elsereturn0;}StatusPriorElem(SqListL,ElemTypecur_e,ElemT
2、h>/*exit()*//*函数结果状态代码*/#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1/*#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/typedefintStatus;/*Status是函数的类型,其值是函数结果状态代码,如OK等*/typedefintBoolean;/*Boolean是布尔类型,其值是TRUE或FALSE*/..../*algo2-1.
3、c实现算法2.1的程序*/#include"c1.h"typedefintElemType;#include"c2-1.h"/*c2-1.h线性表的动态分配顺序存储结构*/#defineLIST_INIT_SIZE10/*线性表存储空间的初始分配量*/#defineLISTINCREMENT2/*线性表存储空间的分配增量*/typedefstruct{ElemType*elem;/*存储空间基址*/intlength;/*当前长度*/intlistsize;/*当前分配的存储容量(以sizeof(Elem
4、Type)为单位)*/}SqList;#include"bo2-1.c"/*bo2-1.c顺序表示的线性表(存储结构由c2-1.h定义)的基本操作(12个)*/StatusInitList(SqList*L)/*算法2.3*/{/*操作结果:构造一个空的顺序线性表*/(*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!(*L).elem)exit(OVERFLOW);/*存储分配失败*/(*L).length=0;/*空表长度为
5、0*/(*L).listsize=LIST_INIT_SIZE;/*初始存储容量*/returnOK;}StatusDestroyList(SqList*L){/*初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L*/free((*L).elem);(*L).elem=NULL;(*L).length=0;(*L).listsize=0;returnOK;}StatusClearList(SqList*L){/*初始条件:顺序线性表L已存在。操作结果:将L重置为空表*/(*L).length=0;r
6、eturnOK;}StatusListEmpty(SqListL)....{/*初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE*/if(L.length==0)returnTRUE;elsereturnFALSE;}intListLength(SqListL){/*初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数*/returnL.length;}StatusGetElem(SqListL,inti,ElemType*e){/*初始条件:顺序线性表L已存
7、在,1≤i≤ListLength(L)*//*操作结果:用e返回L中第i个数据元素的值*/if(i<1
8、
9、i>L.length)exit(ERROR);*e=*(L.elem+i-1);returnOK;}intLocateElem(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType)){/*初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)*//*操作结果:返回L中第1个与e满足关系compare()的数据元素的
10、位序。*//*若这样的数据元素不存在,则返回值为0。算法2.6*/ElemType*p;inti=1;/*i的初值为第1个元素的位序*/p=L.elem;/*p的初值为第1个元素的存储位置*/while(i<=L.length&&!compare(*p++,e))++i;if(i<=L.length)returni;elsereturn0;}StatusPriorElem(SqListL,ElemTypecur_e,ElemT
此文档下载收益归作者所有