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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

2数据结构实验2顺序表.docx

1、2数据结构实验2顺序表实 验 报 告院(系):信息科学与技术学院 课程名称:数据结构 日期:班级学号实验室专业姓名计算机号实验名称实验2 顺序表的操作成绩评定所用软件V C教师签名实验目的1.掌握线性表的基本概念2.掌握顺序表的建立、插入和删除等方法。3.掌握顺序表的基本算法。实验准备1.复习书上有关内容。2.阅读实验步骤中的函数,写出函数功能。3.写出实验步骤2、3、4的源程序。(本次实验需4学时)实验内容第一部分(2学时)1.分析下列程序并上机运行,写出各子函数功能并写出运行结果。#define MAXSIZE 100typedef int elemtype;typedef struct

2、elemtype elemMAXSIZE; int last; sqlist;sqlist *init_sqlist( ) sqlist *L; L=(sqlist *)malloc(sizeof(sqlist); L-last=-1; return L; void creatsqlist(sqlist *L)int i;printf(%d,L-last);scanf(%d,&(*L).last);for(i=0;i=(*L).last;i+) scanf(%d,&(*L).elemi);int Location_sqlist(sqlist *L, int x) int i=0; while(

3、ilast & L-elemi!= x) i+; if (iL-last) return -1; else return i; int InsList(sqlist *L,int i,int x) int k; if(iL-last+2) printf(Locate Error!);return(0); /*位置i值不合法 */ if(L-last=MAXSIZE-1) printf(Filled!);return(0); for(k=L-last;k=i-1;k-) L-elemk+1=L-elemk; /*插入位置后的元素依次右移*/ L-elemi-1=x; /* 插入x */ L-la

4、st+; /* 表长加1*/ return(1);void main() int i;sqlist *a;clrscr();a=init_sqlist();creatsqlist(a);printf( %dn,Location_sqlist(a,3);for(i=0;ilast;i+) printf( %d,a-elemi); if(InsList(a,2,78) printf(nOK!); /*执行函数调用*/ else printf(nERROR!);for(i=0;ilast;i+) printf( %d,a-elemi);2.下列函数的功能是在顺序表中删除第i个元素,请编制主函数进行函

5、数调用,上机调试运行。i #include #include #define ERROR 0#define MAXSIZE 100typedef int elemtype;typedef struct elemtype elemMAXSIZE; int last; SeqList;int DelList(SeqList *L,int i,elemtype *e)/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1iL.last+1 */ int k; if(iL-last+1) printf(删除位置不合法!); return(ERROR); *e = L-elemi-

6、1; /* 将删除的元素存放到e所指向的变量中*/ for(k=i; ilast; k+) L-elemk-1 = L-elemk; /*将后面的元素依次前移*/ L-last-; return(1);main() int n ,x; SeqList *t; SeqList *e; printf(请输入数组:n); for (n=0;nlast;n+) scanf(%d,&(*t)-elemn); printf(请输入要删除的位置:n); scanf(%d,&x); x=DelList(t,x,e); if (x) for (n=0;nlast;n+) printf(%dn,t-elemi);

7、 else printf(n);3.阅读下列函数,写该函数的功能,再编制主函数进行函数调用,写出运行结果。#define MAXSIZE 100#include stdio.h#include stdlib.htypedef int elemtype;typedef struct elemtype elemMAXSIZE; int last; sqlist;sqlist *init_sqlist( ) sqlist *L; L=(sqlist *)malloc(sizeof(sqlist); L-last=-1; return L; void creatsqlist(sqlist *L)int

8、 i; printf(请输入线性表的长度); scanf(%d,&i); L-last=i-1; printf(请输入线性表中的各元素值,注意:必须有序); for(i=0;ilast;i+) scanf(%d,&(*L).elemi);void merge(sqlist *LA, sqlist *LB, sqlist *LC) int i,j,k; i=0;j=0;k=0; while(ilast&jlast) if(LA-elemielemj) LC-elemk= LA-elemi; i+; k+; else LC-elemk=LB-elemj; j+; k+; while(ilast)

9、/*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/ LC-elemk= LA-elemi; i+; k+; while(jlast) /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/ LC-elemk= LB-elemj; j+; k+; LC-last=LA-last+LB-last+1;4.若顺序表a中的数据元素按升序排列,要求将x插入到顺序表中的合适位置,以保证表的有序性,试给出其程序,并上机调试运行。提示:(1)设顺序表中原有数据个数为10个,依次是1,3,5,7,12,45,67,89,92,99。(2)设需要插入的数据x值为25。(3)注意表长的变化。(4)有

10、序表的插入,需要分两步完成:第一步确定插入位置,第二步在插入位置上插入指定的数据。5.将顺序表 (a1,a2,. ,an) 重新排列为以 a1 为界的两部分:a1 前面的值均比 a1 小,a1 后面的值都比 a1 大(这里假设数据元素的类型具有可比性, 不妨设为整型) 基本思路: 从第二个元素开始到最后一个元素,逐一向后扫描: (1)当前数据元素 aI 比 a1 大时,表明它已经在 a1 的后面,不必改变它与 a1 之间的位置,继续比较下一个。(2)当前结点若比 a1 小,说明它应该在 a1 的前面,此时将它上面的元素都依次向下移动一个位置,然后将它置入最上方。源程序如下:#define MA

11、XSIZE 100#include stdio.h#include stdlib.htypedef int elemtype;typedef struct elemtype elemMAXSIZE; int last; sqlist; /顺序表结构体类型的定义sqlist *init_sqlist( ) /顺序表的初始化 sqlist *L; L=(sqlist *)malloc(sizeof(sqlist); L-last=-1; return L; void creatsqlist(sqlist *L) /顺序表的建立int i;printf(请输入顺序表中最后一个元素的下标n);scan

12、f(%d,&(*L).last);printf(请输入%d个元素n,L-last +1);for(i=0;ielem0; /* 将基准置入 x 中*/ for(i=1;ilast;i+) if(L-elemielemi; for(j=i-1;j=0;j-) /*移动*/ L-elem j+1=L-elem j; L-elem0=y; void dayin(sqlist *a)int i;for(i=0;ilast;i+) printf( %d,a-elemi);/顺序表的输出printf(n);void main() /* 顺序表的主函数 */int i;sqlist *a;a=init_sq

13、list();/调用函数对顺序表的初始化creatsqlist(a);/建立顺序表printf(建立的顺序表为:n);dayin(a);/输出顺序表part(a);/顺序表的拆分printf(拆分后的顺序表为:n);dayin(a);/输出拆分后的线性表6.编写程序从一给定的顺序表A中删除值在x,y(x=y)之间的所有元素。提示: 1)方法:逐一比较每个元素的值,若元素值在X,Y之间,则删除。2)主函数的编写可模仿第一题7.编写程序,将给定的顺序表逆置。 例如:顺序表中的元素为: 2 4 7 1 9 12 3 8逆置后为:8 3 12 9 1 7 4 2*(选做)8.程序阅读题,下列程序是有关

14、顺序表的有关操作,请阅读,然后再上机运行。#define LIST_INIT_SIZE 8 /线性表存储空间的初始分配量#define LISTINCREMENT 10 /线性表存储空间的分配增量#define OVERFLOW -2#define ERROR 0#define OK 1#define TRUE 1#define FALSE 0typedef int Status;typedef int ElemType;typedef struct ElemType *elem; / 存储空间基址 int length; / 当前长度 int listsize; / 当前分配的存储容量(以s

15、izeof(ElemType)为单位)SqList; / 俗称 顺序表typedef SqList OdSqList; /有序顺序表Status InitList(OdSqList&); / 结构初始化void Destroy(OdSqList&); /销毁有序顺序表void ClearList(OdSqList&);/清空有序表Status ListEmpty(OdSqList);/判有序表为空int ListLength(OdSqList);/求表长int LocateElem(OdSqList,ElemType); / 查找void ListInsert(OdSqList&,ElemTy

16、pe); / 插入元素Status ListDelete(OdSqList&, int,ElemType& ); / 删除元素int ListDeletem(OdSqList&L, ElemType e); / 删除所有值为e的元素,返回删除的元素个数int ListDeletemn(OdSqList&, ElemType, ElemType ); / 删除所有值界于minkmaxk的元素,并返回删除的元素个数void ListTraverse(OdSqList);/遍历非递减有序线性表#include#includeStatus InitList( OdSqList& L ) / 构造一个空

17、的线性表 L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof(ElemType); if (!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; return OK; / InitListvoid ListTraverse(OdSqList L) /遍历线性表 int i; printf(listsize is %d.n,L.listsize); printf(listlength is %d.n,L.length); printf(the list is:();

18、 for(i=1;i=L.length;i+) printf(%d ,L.elemi-1); printf()n);int LocateElem(OdSqList L, ElemType e) / 在顺序表中查询第一个满足判定条件的数据元素,若存在,则返回它的位序,否则返回 0 int i; i = 1; / i 的初值为第 1 元素的位序 ElemType *p; p = L.elem; / p 的初值为第 1 元素的存储位置 while (i = L.length & *p+!=e) +i; if (i = L.listsize) / 当前存储空间已满,增加分配 newbase = (El

19、emType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (ElemType); if (!newbase) exit(OVERFLOW);/ 存储分配失败 L.elem = newbase; / 新基址 L.listsize += LISTINCREMENT; / 增加存储容量 q = &(L.elem0); / q 指示第1个元素位置 for (p = &(L.elemL.length-1);p=q&*pe; -p) *(p+1) = *p; / 插入位置及之后的元素右移 *(p+1) = e; / 插入e +L.length; /

20、 表长增1Status ListDelete(OdSqList &L, int i, ElemType &e) ElemType *p,*q; if (i L.length) return ERROR;/ 删除位置不合法 p = &(L.elemi-1); / p 为被删除元素的位置 e = *p; / 被删除元素的值赋给 e q = L.elem+L.length-1; / 表尾元素的位置 for (+p; p = q; +p) *(p-1) = *p; / 被删除元素之后的元素左移 -L.length; / 表长减1 return OK;void Destroy(OdSqList& L)

21、/销毁有序顺序表 free(L.elem);void ClearList(OdSqList& L) /清空有序表 L.length=0;Status ListEmpty(OdSqList L) /判有序表为空 if(L.length=0) return TRUE; else return FALSE;int ListLength(OdSqList L) /求表长 return L.length;int ListDeletem(OdSqList& L, ElemType e) / 删除所有值为e的元素,返回删除的元素个数 ElemType *p,*q,*r; int i=0;/删除的元素个数 p

22、=&L.elem0;/扫描指针 for(q=&L.elemL.length-1;*pe&p=q;p+); if(p=q&*p=e) i+; for(r=p+1;*r=e&r=q;r+,i+); if(r=q) for(;r=q;r+,p+) *p=*r; L.length-=i; return i;int ListDeletemn(OdSqList& L, ElemType mink, ElemType maxk) / 删除所有值界于minkmaxk的元素,并返回删除的元素个数 ElemType *p,*q,*r,temp; int i=0; if(maxkmink) temp=maxk; m

23、axk=mink; mink=temp; p=&L.elem0; for(q=&L.elemL.length-1;*pmink&p=q;p+);/p指针指向第1个大于等于mink的元素if(p=q&*p=maxk)/若*p小于等于maxk i+; for(r=p+1;*r=maxk&r=q;r+,i+);/r指针指向第1个大于maxk的元素 if(r=q) for(;r=q;r+,p+) *p=*r; L.length-=i; return i;void main() OdSqList L; int k; char i; ElemType e,mink,maxk; printf(OdSqLis

24、t is initn); i=InitList(L); ListTraverse(L); while(1) printf(nnplease select:n); printf(1-insertn); printf(2-traversen); printf(3-deletein); printf(4-deletekn); printf(5-deletemink-maxkn); printf(6-locaten); printf(7-isemptyn); printf(8-lengthn); printf(9-clearlistn); printf(0-quitn); scanf(%d,&k);

25、switch(k) case 1: printf(please input e:); scanf(%d,&e); ListInsert(L,e); ListTraverse(L); scanf(%c,&i); printf(please press any key to continue); scanf(%c,&i); break; case 2: ListTraverse(L); scanf(%c,&i); printf(please press any key to continue); scanf(%c,&i); break; case 3: while(1) printf(please

26、 input delete i:); scanf(%d,&i); if(ListDelete(L,i,e)=ERROR) printf(delete positon is error!n); else printf(Deleted elem is %dn,e); break; ListTraverse(L); scanf(%c,&i); printf(please press any key to continue); scanf(%c,&i); break; case 4: printf(please input delete e:); scanf(%d,&e); ListTraverse(L); printf(%d elem is deleted.n,ListDeletem(L,e);

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

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