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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

线性表的基本操作.docx

1、线性表的基本操作数 据 结 构 实 验 报 告 2011年4月13日1.项目组成2.程序结构图main题目一:ClearList_SqListEmpty_SqCreateList_SqListInsert_SqGetElem_SqNextElem_SqPriorElem_SqListLength_SqDestroyList_SqLocateElem_SqListTraverse_SqListDelete_SqInitList_Sq题目二: mainListInsert_L CreateList_LClearList_LListEmpty_LInitList_LDestroyList_LList

2、Length_LNextElem_LLocateElem_LPriorElem_LGetElem_LListTraverse_LListDelete_L3.算法及其功能函数题目一:InitList_Sq(SqList *L) /*创建线性表*/CreateList_Sq(SqList *L) /*输入线性表中元素 */DestroyList_Sq(SqList *L) /*销毁线性表*/ClearList_Sq(SqList *L) /*清空线性表*/ListEmpty_Sq(SqList L) /*判断是否为空*/ListLength_Sq(SqList L) /*求线性表长度 */GetE

3、lem_Sq(SqList L, int i, ElemType *e) /*取第i个元素并用e返回*/LocateElem_Sq (SqList L, int e) /*判断e在表中位置*/PriorElem_Sq(SqList L,int i, ElemType cur_e, ElemType *pre_e) /*取前驱*/NextElem_Sq(SqList L,int i, ElemType cur_e, ElemType *next_e ) /*取后继*/ListInsert_Sq(SqList *L, int i, ElemType e) /*在第i个元素前插入e*/ListDel

4、ete_Sq(SqList *L, int i, ElemType *e) /*删除第i个元素 */ListTraverse_Sq(SqList L,int i) /*遍历线性表*/题目二:InitList_L(LinkList *L) /*创建线性表*/CreateList_L(LinkList *L) /*输入线性表中元素 */DestroyList_L(LinkList *L) /*销毁线性表*/ClearList_L(LinkList *L) /*清空线性表*/ListEmpty_L(LinkList L) /*判断是否为空*/ListLength_L(LinkList L) /*求线

5、性表长度 */GetElem_L(LinkList L, int i, ElemType *e) /*取第i个元素并用e返回*/LocateElem_L (LinkList L, int e) /*判断e在表中位置*/PriorElem_L(LinkList L,int i, ElemType cur_e, ElemType *pre_e) /*取前驱*/NextElem_L(LinkList L,int i, ElemType cur_e, ElemType *next_e ) /*取后继*/ListInsert_L(LinkList *L, int i, ElemType e) /*在第i

6、个元素前插入e*/ListDelete_L(LinkList *L, int i, ElemType *e) /*删除第i个元素 */ListTraverse_L(LinkList L,int i) /*遍历线性表*/4.源代码题目一:#include#includetypedef int ElemType;typedef int Status;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2#define LIST_INIT_SIZE 100 /线性表存储空间的初始分配量#define LI

7、STINCREMENT 10 /线性表空间的分配增量 typedef struct ElemType *elem; /存储空间基址 int length; /当前长度 int listsize; /当前分配的存储容量(以sizeof(ElemType)为单位)SqList;Status InitList_Sq(SqList *L) /构造一个空的线性表L。 (*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!(*L).elem) exit(OVERFLOW); /存储空间失败 (*L).length=0; /空表长度

8、为0 (*L).listsize=LIST_INIT_SIZE; /初始存储容量 return OK; /InitList_SqStatus CreateList_Sq(SqList *L) int i,n; printf(请输入线性表长度nn=); scanf(%d,&n); (*L).length=n; printf(n输入线性表L:n); for(i=0;in;i+) scanf(%d,&(*L).elemi); /输入线性表元素 return OK;Status DestroyList_Sq(SqList *L) /销毁线性表L。 if(*L).elem) free(*L).elem)

9、; /释放线性表占据的所有存储空间 return OK; /DestroyList_SqStatus ClearList_Sq(SqList *L) /将L重置为空表。 (*L).length=0; /将线性表的长度置为0 return OK; /ClearList_SqStatus ListEmpty_Sq(SqList L) /线性表判空。 if(L.length=0) return TRUE; /若L为空,则返回TURE else return FALSE; /若L不为空,则返回FALSE /ListEmpty_SqStatus ListLength_Sq(SqList L) /返回线性

10、表的长度。 return(L.length); /ListLength_SqStatus GetElem_Sq(SqList L, int i, ElemType *e) /用e返回L中的第i个数据元素的值。 if(iL.length) return ERROR; / i值不合法 *e=L.elemi-1; /将第i个数据元素的值赋给e return OK; /GetElem_Sq Status LocateElem_Sq (SqList L, int e) int i; for(i=1; i ListLength_Sq(L) return 0; *pre_e=L.elemi-2 ; /将cu

11、r_e的前驱赋值给pre_e return OK; /PriorElem_SqStatus NextElem_Sq(SqList L,int i, ElemType cur_e, ElemType *next_e) i=LocateElem_Sq(L,cur_e); if(i=ListLength_Sq(L)|iListLength_Sq(L) return 0; *next_e= L.elemi; /将cur_e的后继赋值给next_e return OK; /NextElem_SqStatus ListInsert_Sq(SqList *L, int i, ElemType e) /在线性

12、表L中的第i个位置之前插入新的元素e。 ElemType *newbase,*p,*q; if (i(*L).length+1) return ERROR; / i值不合法 if (*L).length=(*L).listsize) newbase=(ElemType*)realloc(*L).elem,(*L).listsize+LISTINCREMENT)*sizeof(ElemType); if (!newbase) exit (OVERFLOW); /存储分配失败 (*L).elem=newbase; (*L).listsize+=LISTINCREMENT; /新基址 q=&(*L)

13、.elemi-1; / q为插入位置 for(p=&(*L).elem(*L).length-1);p=q;-p) *(p+1)=*p; /插入位置及之后的元素右移 *q=e; /插入e +(*L).length; /表长增1 return OK; /ListInsert_SqStatus ListDelete_Sq(SqList *L, int i, ElemType *e) /在线性表L中删除第i个元素,并用e返回其值 ElemType *p,*q; if (i(*L).length) return ERROR; / i值不合法 p=&(*L).elemi-1); / p为被删除元素的位置

14、 *e=*p; /被删除元素的值赋给e q=(*L).elem+(*L).length-1; /表尾元素的位置 for (+p;p=q;+p) *(p-1)=*p; /被删除元素之后的元素左移 -(*L).length; /表长减1 return OK; /ListDelete_SqStatus ListTraverse_Sq(SqList L,int i) /线性表L的遍历 printf(线性表为:); for(i=0;iL.length;i+) printf(%4d,(L.elemi); printf(nn); return OK; /ListTraverse_Sqvoid main()

15、SqList L; ElemType e,cur_e,pre_e,next_e; int i,n,select,t; InitList_Sq(&L); CreateList_Sq(&L); printf(n); do printf(1:判断线性表是否为空n); printf(2:线性表的长度n); printf(3:查询线性表的第i个元素n); printf(4:查找值为e的元素的位置n); printf(5:求数据元素t的前驱n); printf(6:求数据元素t的后继n); printf(7:在线性表第i个位置前插入新元素en); printf(8:删除线性表第i个元素,返回其值n); p

16、rintf(9:遍历线性表n); printf(10:清空线性表n); printf(0:结束n); scanf(%d,&select); switch(select) case 1: if(ListEmpty_Sq(L) printf(线性表为空n); else printf(线性表非空n);break; case 2:ListLength_Sq(L); printf(线性表的长度为 %dn,(L.length);break; case 3: printf(ni=); scanf(%d,&i); if(GetElem_Sq(L,i,&e)=ERROR) printf(i值不合法n); els

17、e printf(第%d个元素的值为%dn,i,e);break; case 4:printf(ne=); scanf(%d,&e); i=LocateElem_Sq (L,e); if(i=L.length) printf(第%d个元素的值为%dn,i,e); else printf(线性表中没有值为%d的元素n,e);break; case 5:printf(nt=); scanf(%d,&t); if(PriorElem_Sq(L,i,t,&e)=1) printf(元素%d的前驱为%dnn,t,e); else printf(元素%d无前驱n,t);break; case 6:prin

18、tf(nt=); scanf(%d,&t); if(NextElem_Sq(L,i,t,&e)=1) printf(元素%d的后继为%dnn,t,e); else printf(元素%d无后继n,t);break; case 7:printf(nie=); scanf(%d,&i,&e); printf(ne=); scanf(%d,&e); if(ListInsert_Sq(&L,i,e)=ERROR) printf(i值不合法nn); else printf(新的线性表为:); for(i=0;iL.length;i+) printf(%4d,(L.elemi); printf(nn);b

19、reak; case 8:printf(ni=); scanf(%d,&i); if(ListDelete_Sq(&L,i,&e)=ERROR) printf(i值不合法nn); else printf(被删除的第%d个元素的值为%dn,i,e); printf(新的线性表为:); for(i=0;iL.length;i+) printf(%4d,(L.elemi); printf(nn);break; case 9:ListTraverse_Sq(L,i);break; case 10:ClearList_Sq(&L); printf(清空线性表成功,线性表长度是%d nn,L.length

20、);break; case 0:printf(操作结束n);break; default:printf(输入选择出错!n); while(select!=0); DestroyList_Sq(&L);题目二:#include#includetypedef int ElemType;typedef int Status;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2typedef struct LNode ElemType date; struct LNode *next;LNode,*Lin

21、kList;Status InitList_L(LinkList *L) (*L)=(LinkList)malloc(sizeof(LNode); (*L)-next=NULL; return OK;Status CreateList_L(LinkList L) int i,n; struct LNode *p; printf(请输入线性表长度n=); scanf(%d,&n); printf(n输入数据:n); for(i=n;i0;i-) p=(LinkList)malloc(sizeof(LNode); scanf(%d,&(*p); p-next=L-next;L-next=p; re

22、turn OK;Status DestroyList_L(LinkList *L) if(L) free(L); return OK;Status ClearList_L(LinkList L) L-next=NULL; return OK;Status ListEmpty_L(LinkList L) if(L-next=NULL) return OK; else return ERROR;Status ListLength_L(LinkList L) int j; struct LNode *p; p=L-next;j=1; while(p) p=p-next;+j; j-; return

23、j;Status GetElem_L(LinkList L,int i,ElemType *e) int j; struct LNode *p; p=L-next;j=1; while(p&jnext;+j; if(!p|ji) return ERROR; *e=p-date; return OK;Status LocateElem_L(LinkList L,ElemType e) int j; struct LNode *p; p=L-next;j=1; while(p&p-date!=e) p=p-next;+j; if(!p) return ERROR; return j;Status

24、PriorElem_L(LinkList L, ElemType cur_e, ElemType *pre_e) int i,j; struct LNode *p; i=LocateElem_L( L, cur_e); p=L-next;j=1; while(p&jnext;+j; if(!p|ji-1) return ERROR; *pre_e=p-date; return OK;Status NextElem_L(LinkList L, ElemType cur_e, ElemType *next_e) int i,j; struct LNode *p; i=LocateElem_L( L

25、, cur_e); p=L;j=0; while(p&jnext;+j; if(!p|ji+1) return ERROR; *next_e=p-date; return OK;Status ListInsert_L(LinkList L, int i, ElemType e) int j; struct LNode *p,*s; p=L;j=0; while(p&jnext;+j; if(!p|ji-1) return ERROR; s=(LinkList)malloc(sizeof(LNode); s-date=e; s-next=p-next; p-next=s; return OK;S

26、tatus ListDelete_L(LinkList L, int i, ElemType *e) int j; ElemType m; struct LNode *p,*q; p=L;j=0; while(p-next&jnext;+j; if(!(p-next)|ji-1) return ERROR; q=p-next; p-next=q-next; *e=q-date; free(q); return OK;Status ListTraverse_L(LinkList L,int i) struct LNode *p; printf(线性表为:n); p=L-next; while(p

27、) printf(%dn,p-date); p=p-next; printf(n); return OK; void main() LinkList L; int i,j,n,select,t; ElemType e,m; struct LNode *p,*q; InitList_L(&L); CreateList_L(L); printf(n); do printf(1:判断线性表是否为空n); printf(2:线性表的长度n); printf(3:查询线性表的第i个元素n); printf(4:查找值为e的元素的位置n); printf(5:求数据元素t的前驱n); printf(6:求数据元素t的后继n); printf(7:在线性表第i个位置前插入新元素en); printf(8:删除线性表第i

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

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