ImageVerifierCode 换一换
你正在下载:

include.docx

[预览]
格式:DOCX , 页数:11 ,大小:17.25KB ,
资源ID:6228736      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6228736.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(include.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

include.docx

1、include#include #include #include /* malloc()等 */ #include /* INT_MAX等 */ #include /* EOF(=Z或F6),NULL */ #include /* atoi() */ #include /* eof() */ #include /* floor(),ceil(),abs() */ #include /* exit() */ /* 函数结果状态代码 */ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE

2、-1 /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */ #define LIST_INIT_SIZE 10 /* 线性表存储空间的初始分配量 */ #define LIST_INCREMENT 2 /* 线性表存储空间的分配增量 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */ typedef int ElemType; typedef struct El

3、emType *elem; /* 存储空间基址 */ int length; /* 当前长度 */ int listsize; /* 当前分配的存储容量(以sizeof(ElemType)为单位) */ SqList; Status equal(ElemType c1,ElemType c2) /* 判断是否相等的函数 */ if(c1=c2) return TRUE; else return FALSE; int comp(ElemType a,ElemType b) /* 根据ab,分别返回-1、0或1 */ if(a=b) return 0; else return (a-b)/abs(

4、a-b); void print(ElemType c) printf(%d ,c); void print2(ElemType c) printf(%c ,c); void print1(ElemType *c) printf(%d ,*c); void InitList(SqList *L) /* 算法2.3 */ /* 操作结果:构造一个空的顺序线性表L */ (*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!(*L).elem) exit(OVERFLOW); /* 存储分配失败 */ (*L).lengt

5、h=0; /* 空表长度为0 */ (*L).listsize=LIST_INIT_SIZE; /* 初始存储容量 */ void DestroyList(SqList *L) /* 初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L */ free(*L).elem); (*L).elem=NULL; (*L).length=0; (*L).listsize=0; void ClearList(SqList *L) /* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 */ (*L).length=0; Status ListEmpty(SqList L) /* 初始条件:顺序

6、线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */ if(L.length=0) return TRUE; else return FALSE; int ListLength(SqList L) /* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */ return L.length; Status GetElem(SqList L,int i,ElemType *e) /* 初始条件:顺序线性表L已存在,1iListLength(L)。操作结果:用e返回L中第i个数据元素的值 */ if(iL.length) return ERROR; *e=*(

7、L.elem+i-1); return OK; int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType) /* 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0) */ /* 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。 */ /* 若这样的数据元素不存在,则返回值为0。算法2.6 */ ElemType *p; int i=1; /* i的初值为第1个元素的位序 */ p=L.elem; /* p的初值为第1个元素的存储位置 */ while(

8、i=L.length&!compare(*p+,e) +i; if(i=L.length) return i; else return 0; Status PriorElem(SqList L,ElemType cur_e,ElemType *pre_e) /* 初始条件:顺序线性表L已存在 */ /* 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱, */ /* 否则操作失败,pre_e无定义 */ int i=2; ElemType *p=L.elem+1; while(iL.length) return INFEASIBLE; /* 操作失败 */ els

9、e *pre_e=*-p; return OK; Status NextElem(SqList L,ElemType cur_e,ElemType *next_e) /* 初始条件:顺序线性表L已存在 */ /* 操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继, */ /* 否则操作失败,next_e无定义 */ int i=1; ElemType *p=L.elem; while(iL.length&*p!=cur_e) i+; p+; if(i=L.length) return INFEASIBLE; /* 操作失败 */ else *next_e=*+

10、p; return OK; Status ListInsert(SqList *L,int i,ElemType e) /* 算法2.4 */ /* 初始条件:顺序线性表L已存在,1iListLength(L)+1 */ /* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */ ElemType *newbase,*q,*p; if(i(*L).length+1) /* i值不合法 */ return ERROR; if(*L).length=(*L).listsize) /* 当前存储空间已满,增加分配 */ newbase=(ElemType *)realloc(*L).

11、elem,(*L).listsize+LIST_INCREMENT)*sizeof(ElemType); if(!newbase) exit(OVERFLOW); /* 存储分配失败 */ (*L).elem=newbase; /* 新基址 */ (*L).listsize+=LIST_INCREMENT; /* 增加存储容量 */ q=(*L).elem+i-1; /* q为插入位置 */ for(p=(*L).elem+(*L).length-1;p=q;-p) /* 插入位置及之后的元素右移 */ *(p+1)=*p; *q=e; /* 插入e */ +(*L).length; /* 表

12、长增1 */ return OK; Status ListDelete(SqList *L,int i,ElemType *e) /* 算法2.5 */ /* 初始条件:顺序线性表L已存在,1iListLength(L) */ /* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */ ElemType *p,*q; if(i(*L).length) /* i值不合法 */ return ERROR; p=(*L).elem+i-1; /* p为被删除元素的位置 */ *e=*p; /* 被删除元素的值赋给e */ q=(*L).elem+(*L).length-1; /* 表

13、尾元素的位置 */ for(+p;p=q;+p) /* 被删除元素之后的元素左移 */ *(p-1)=*p; (*L).length-; /* 表长减1 */ return OK; void ListTraverse(SqList L,void(*vi)(ElemType*) /* 初始条件:顺序线性表L已存在 */ /* 操作结果:依次对L的每个数据元素调用函数vi() */ /* vi()的形参加&,表明可通过调用vi()改变元素的值 */ ElemType *p; int i; p=L.elem; for(i=1;i=L.length;i+) vi(p+); printf(n); mai

14、n() SqList L; ElemType e,e0; Status i; int j,k; InitList(&L); printf(初始化L后:L.elem=%u L.length=%d L.listsize=%dn,L.elem,L.length,L.listsize); printf(按任意键继续.n); getch(); for(j=1;j=5;j+) i=ListInsert(&L,1,j); printf(在L的表头依次插入15后:*L.elem=); for(j=1;j=5;j+) printf(%d ,*(L.elem+j-1); printf(n); printf(L.e

15、lem=%u L.length=%d L.listsize=%d ,L.elem,L.length,L.listsize); printf(按任意键继续.n); getch(); i=ListEmpty(L); printf(L是否空:i=%d(1:是 0:否)n,i); ClearList(&L); printf(清空L后:L.elem=%u L.length=%d L.listsize=%d ,L.elem,L.length,L.listsize); i=ListEmpty(L); printf(L是否空:i=%d(1:是 0:否)n,i); printf(按任意键继续.n); getch

16、(); for(j=1;j=10;j+) ListInsert(&L,j,j); printf(在L的表尾依次插入110后:*L.elem=); for(j=1;j=10;j+) printf(%d ,*(L.elem+j-1); printf(n); printf(L.elem=%u L.length=%d L.listsize=%dn,L.elem,L.length,L.listsize); printf(按任意键继续.n); getch(); ListInsert(&L,1,0); printf(在L的表头插入0后:*L.elem=); for(j=1;j=ListLength(L);j

17、+) /* ListLength(L)为元素个数 */ printf(%d ,*(L.elem+j-1); printf(n); printf(L.elem=%u(有可能改变) L.length=%d(改变) L.listsize=%d(改变)n,L.elem,L.length,L.listsize); printf(按任意键继续.n); getch(); GetElem(L,5,&e); printf(第5个元素的值为:%dn,e); for(j=10;j=11;j+) k=LocateElem(L,j,equal); if(k) /* k不为0,表明有符合条件的元素,且其位序为k */ p

18、rintf(第%d个元素的值为%dn,k,j); else printf(没有值为%d的元素n,j); printf(按任意键继续.n); getch(); for(j=1;j=2;j+) /* 测试头两个数据 */ GetElem(L,j,&e0); /* 把第j个数据赋给e0 */ i=PriorElem(L,e0,&e); /* 求e0的前驱 */ if(i=INFEASIBLE) printf(元素%d无前驱n,e0); else printf(元素%d的前驱为:%dn,e0,e); printf(按任意键继续.n); getch(); for(j=ListLength(L)-1;j=

19、k;j-) i=ListDelete(&L,j,&e); /* 删除第j个数据 */ if(i=ERROR) printf(删除第%d个元素失败n,j); else printf(删除第%d个元素成功,其值为:%dn,j,e); printf(依次输出L的元素:); ListTraverse(L,print1); /* 依次对元素调用print1(),输出元素的值 */ printf(按任意键继续.n); getch(); DestroyList(&L); printf(销毁L后:L.elem=%u L.length=%d L.listsize=%dn,L.elem,L.length,L.listsize); printf(按任意键继续.n); getch();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1