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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验报告一顺序表.docx

1、实验报告一顺序表完成人:朱 荣(程序员、测试员、文档员) 113200980300006 陈森来(程序员、测试员、文档员) 113200980300007 邓兵超(程序员、测试员、文档员) 113200980300023 熊 余(程序员、测试员、文档员) 113200980300030 实验题目实验一 线性结构(综合性实验 3学时)实验目的本次实习的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。通过本次实习还可复习高级语言的使用方法。必做题:1、顺序线性表的插入、删除、输出元素程序。算法设计思路插入算法:int Insert_SeqList(SeqL

2、ist *L,int i,DataType x) /顺序表的插入算法cout把元素x插入到位置i上SeqLength=MAXSIZE-1) /数组长度等于设定值-1,则表满cout表满endl;return -1;if(iL-SeqLength+1) /插入位置在第一个之前,或者插入到大于当前数组的长度+1cout位置错SeqLength-1;j=i;j-) /i之后全部后移L-dataj+1=L-dataj;L-datai=x; /将元素填充到空白位置L-SeqLength+;cout插入成功endl;Display_SeqList(L);return 1;.顺序表的删除算法:int Del

3、ete_SeqList(SeqList *L,int i) cout将位置为i的元素删除endl;int j;if(iL-SeqLength)cout不存在第i个元素endl;return 0;for(j=i;jSeqLength-1;j+)L-dataj=L-dataj+1; /i索引之后全部前移L-SeqLength-;cout删除成功endl;Display_SeqList(L);return 1;顺序表的输出算法:void Display_SeqList(SeqList *L) cout顺序表中储存的元素为endl;int i;for(i=0;iSeqLength-1;i+)coutd

4、atai ; coutendl;编写代码,调试运行【Sequence.h】#includeusing namespace std;#define MAXSIZE 15typedef int DataType;typedef struct DataType dataMAXSIZE; /通常用一位数组来描述顺序表的数据存储 int SeqLength; /*线性表长度*/ SeqList; SeqList *Init_SeqList(); /初始化顺序表void Define_SeqList(SeqList *L,int n); /填充顺序表的内容void Display_SeqList(SeqL

5、ist *L); /提取顺序表中的元素int Insert_SeqList(SeqList *L,int i,DataType x); /添加元素到指定位置(从开始)int Delete_SeqList(SeqList *L,int i); /删除指定位置的元素(从开始)【Sequence.cpp】#include Sequence.h#includeusing namespace std;SeqList *Init_SeqList()/顺序表的初始化算法,将顺序表清空SeqList *L;L=new SeqList;L-SeqLength=0; /*长度置为-1*/return L;/顺序表

6、的定义算法void Define_SeqList(SeqList *L,int n) cout请依次输入顺序表中要储存的元素:endl;for(int i=0;iL-datai; /输入数组元素L-SeqLength+;/顺序表的输出算法void Display_SeqList(SeqList *L) cout顺序表中储存的元素为endl;int i;for(i=0;iSeqLength-1;i+)coutdatai ; coutendl;/顺序表的插入算法int Insert_SeqList(SeqList *L,int i,DataType x) cout把元素x插入到位置i上SeqLen

7、gth=MAXSIZE-1) /数组长度等于设定值-1,则表满cout表满endl;return -1;if(iL-SeqLength+1) /插入位置在第一个之前,或者插入到大于当前数组的长度+1cout位置错endl;int Is,Id;cout请重新输入数据_:Is; cout请重新输入插入的位置_:Id;Insert_SeqList(L,Id,Is);/顺序表的插入for(j=L-SeqLength-1;j=i;j-) /i之后全部后移L-dataj+1=L-dataj;L-datai=x; /将元素填充到空白位置L-SeqLength+;cout插入成功endl;Display_Se

8、qList(L);return 1;/顺序表的删除算法int Delete_SeqList(SeqList *L,int i) cout将位置为i的元素删除endl;int j;if(iL-SeqLength)cout不存在第i个元素endl;int Dd; cout请重新输入要删除数据的位置_:Dd; Delete_SeqList(L,Dd);/顺序表的删除for(j=i;jSeqLength-1;j+)L-dataj=L-dataj+1; /i索引之后全部前移L-SeqLength-;cout删除成功endl;Display_SeqList(L);return 1;【Test_Sequen

9、ce.cpp】 #include Sequence.h#includeusing namespace std;int main() int Sl,Is,Id,Dd; SeqList *L;/顺序表的定义 L=Init_SeqList();/顺序表的初始化 cout请定义线性表的长度:Sl; Define_SeqList(L,Sl);/定义顺序表 Display_SeqList(L);/顺序表的输出 cout请输入插入线性表的数据:Is; cout请输入该数据插入线性表的位置:Id; Insert_SeqList(L,Id,Is);/顺序表的插入 cout请输入要删除数据的位置:Dd; Dele

10、te_SeqList(L,Dd);/顺序表的删除 return 0;运行结果:必做题:2、带头结点的单链表的插入、删除、输出元素程序。 写出算法设计思路。插入删除的位置,建立结点指针,移动指针到要插入删除的节点的前一节点,对其进行插入删除操作。最后顺序输出元素。一、编写代码,调试运行,实现题目要求2题(代码)#includeusing namespace std;typedef struct linklist int data; struct linklist *next;LinkList;/尾插入节点方式建链式线性表void CreateList(LinkList *&sl) LinkLis

11、t *s,*r; int i; int n; int listdata; sl=(LinkList *)malloc(sizeof(LinkList); r=sl; coutn; cout请输入节点(整形数):; for(i=0;ilistdata; s=(LinkList *)malloc(sizeof(LinkList); s-data=listdata; r-next=s; r=s; r-next=NULL;/求解线性表的长度int GetLength(LinkList *sl) int i=0; LinkList *p=sl-next; while(p!=NULL) i+; p=p-n

12、ext; return i;/删除元素,位置不合法返回0,合法且完成操作返回1int DeleElem(LinkList *&sl,int i) if(iGetLength(sl) return 0; LinkList *p,*q; int j=1; p=sl; while(jnext; j+; /p指向删除节点的前一个节点 q=p-next; p-next=q-next; free(q); return 1;/插入元素,位置不合法返回0,合法且完成操作返回1int InsElem(LinkList *&sl,int x,int i) if(iGetLength(sl)+1) return 0

13、; LinkList *p,*s; s=(LinkList *)malloc(sizeof(LinkList); s-data=x; s-next=NULL; int j=1; p=sl; while(jnext; j+; s-next=p-next; p-next=s; return 1; /输出线性表的元素void DispElem(LinkList *sl) LinkList *p=sl-next; while(p!=NULL) coutdatanext; coutendl;/mainint main() LinkList *sl; cout建链式表:endl; CreateList(s

14、l); cout链式表的元素如下:; DispElem(sl); cout插入一个元素:; coutendl; int x,i; coutx; couti; if(InsElem(sl,x,i) cout插入操作完成后链式表的元素如下:; coutendl; DispElem(sl); else coutERROR!endl; cout删除一个元素:; coutendl; int j; coutj; if(DeleElem(sl,j) cout删除操作完成后链式表的元素如下:endl; DispElem(sl); else coutERROR!endl; return 0;测试数据运行结果如下

15、:(插入位置删除位置均合法)运行结果(插入位置删除位置均不合法):选做题:问题描述 约瑟夫(Joeph)问题的一种描述是:编号为1,2,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。基本要求 利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。二、写出算法设计思路。建立不带头结点的循环单链表,其节点包含三个数据项:data(

16、密码),num(序号),next(指向下一结点的指针),依据m值移动指针到出列者,输出序号,取出密码,删除该节点节点,以密码作为下一次循环m值,循环上述过程,知道单链表为空的。三、编写代码,调试运行,实现题目要求选做题(代码)#includeusing namespace std;typedef struct linklist struct linklist *next; int num; int data;LinkList;/建不带头结点的循环链表void CreateList(LinkList *&sl,int n) LinkList *rear; LinkList *s; int lda

17、ta,i; if(n0) cinldata; sl=(LinkList *)malloc(sizeof(LinkList); /sl为第一个节点,采用尾插入式建立单链表 sl-data=ldata; sl-num=1; rear=sl; for(i=2;ildata; s-data=ldata; s-num=i; rear-next=s; rear=s; rear-next=sl; else sl=NULL;/删除节点LinkList *DeletElem(LinkList *&sl,int i) int j=1; LinkList *p,*q; p=sl; while(jnext; /指向删

18、除的节点 j+; coutnumnext; while(q-next-num!=p-num) q=q-next; /找到前驱节点 q-next=p-next; return p;int main() int n; coutn; coutn个人的密码分别为:; LinkList *sl; CreateList(sl,n); int m; coutm; coutn个人的出列顺序:; LinkList *p,*q; q=sl; for(int i=0;idata; q=p-next; free(p); coutendl; return 0;测试数据 m的初值为20;密码:3,1,7,2,4,8,4(正确的结果应为6,1,4,7,2,3,5)运行结果m的初值为2;密码:2 5 3 6(正确的结果应为2 4 3 1)运行结果如下四、写出算法设计、编程和调试运行的体会。一般建立带头结点的循环单链表时操作插入删除等操作较为容易,但考虑到本题目描述与不带头结点的单链表相识,故选择用单链表。题目为简单的模拟题,熟悉对单链表插入等操作。

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

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