实验一_线性表操作_实验报告

上传人:xmg****18 文档编号:119876146 上传时间:2020-01-28 格式:DOC 页数:16 大小:126.50KB
返回 下载 相关 举报
实验一_线性表操作_实验报告_第1页
第1页 / 共16页
实验一_线性表操作_实验报告_第2页
第2页 / 共16页
实验一_线性表操作_实验报告_第3页
第3页 / 共16页
实验一_线性表操作_实验报告_第4页
第4页 / 共16页
实验一_线性表操作_实验报告_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《实验一_线性表操作_实验报告》由会员分享,可在线阅读,更多相关《实验一_线性表操作_实验报告(16页珍藏版)》请在金锄头文库上搜索。

1、. . . .中国矿业大学计算机学院实验报告课程名称 数据结构 实验名称_线性表操作实验报告要求:1.实验目的2.实验内容 3.实验步骤 4.运行结果 5.流程图 6.实验体会 一、实验目的1 熟悉并掌握线性表的逻辑结构、物理结构。2 熟悉并掌握顺序表的存储结构、基本操作和具体的函数定义。3 熟悉VC+程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。4 熟悉VC+操作环境的使用以及多文件的输入、编辑、调试和运行的全过程。二、实验要求 1 实验之前认真准备,编写好源程序。2 实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。3 不断积累程

2、序的调试方法。三、实验内容 基本题:1 对元素类型为整型的顺序存储的线性表进行插入、删除和查找操作。源程序:#include#include#includeconst LIST_INIT_SIZE=10;const LISTINCREMENT=1;typedef structint *elem;int length;int listsize;SqList;void InitList_Sq(SqList&L) /构造一个空的线性表LL.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int);if(!L.elem)exit(0); /存储分配失败L.length=

3、0; /空表长度为0L.listsize=LIST_INIT_SIZE; /初始存储容量coutOK!endl;void ListInsert_Sq(SqList&L,int i,int j) /在顺序线性表L中第i个位置之前插入新的元素j, /i的合法值为1=i=ListInsert_Sq(L)+1if(iL.length+1)coutERROR!=L.listsize) /当前存储空间已满,增加分配int *newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int);if(!newbase)exit(0); /存储

4、分配失败L.elem=newbase; /新基址L.listsize+=LISTINCREMENT; /增加存储容量int *q=&(L.elemi-1);for(int*p=&(L.elemL.length-1);p=q;-p)*(p+1)=*p;*q=j;+L.length;coutOK!endl;/ListInsert_Sqvoid ListDelete_Sq(SqList&L,int i,int&j) /在顺序线性表L中删除第i个元素,并用j返回其值 /i的合法值为1=i=ListInsert_Sq(L)if(iL.length)coutERROR!endl; /i值不合法int *p

5、=&(L.elemi-1); /p为被删除元素的位置j=*p; /被删除元素的值赋给jint *q=L.elem+L.length-1; /表尾元素的位置for(+p;p=q;+p)*(p-1)=*p;-L.listsize; /被删除元素之后的元素左移coutOK!endl; /表长减1/ListDelete_Sqbool compare(int m,int n) if(m=n)return true;elsereturn false;int LocateElem_Sq(SqList L,int j) /在顺序线性表L中查找第1个值与j满足compare()的元素的位序 /若找到,则返回其在

6、L中的位序,否则返回0int i=1; /i的初值为第1个元素的位序int *p=L.elem; /p的初值为第1个元素的存储位置while(i=L.length&!compare(*p,j)+i;p+;if(i=L.length)return i;elsereturn 0;/LocateElem_Sqvoid disp(SqList&L)int *p=L.elem;for(int i=0;iL.listsize;i+)cout*p ;p+;void main()SqList List;InitList_Sq(List);int *p=List.elem;int m,n,j,k,x,y;for

7、(int i=0;ix;*p=x;p+;List.length+;cout插入请按1;删除请按2;寻找请按3y;if(y=1)cout请输入插入位置和元素的值:mn;ListInsert_Sq(List,m,n);disp(List);else if(y=2)cout请输入要删除第几个元素:m;ListDelete_Sq(List,m,j);coutjendl;disp(List);elsecout请输入所要查找的元素:m;coutLocateElem_Sq(List,m)endl;coutendl;运行结果:加强、提高题:2、编写一个求解Josephus问题的函数。用整数序列1, 2, 3,

8、 , n表示顺序围坐在圆桌周围的人。然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。最后分析所完成算法的时间复杂度。定义JosephusCircle类,其中含完成初始化、报数出圈成员函数、输出显示等方法。(可以选做其中之一)加强题:1、采用数组作为求解过程中使用的数据结构。提高题:2、采用循环链表作为求解过程中使用的数据结构。运行时允许指定任意n、s、m数值,直至输入 n = 0 退出程序。源程序:(1)加强:#include #include #include

9、int a100;int josephus(int n,int s,int m)if(!(n*s*m)cout输入错误!endl;exit(0);int x=1,y=n;int i=s-1;int j;while(y)for(i=0;in;i+)if(ai+1)ai=x+;if(ai=m)ai=-1;couti+1出局!endl;x=1;y-;for(j=0;jn;j+)if(aj+1)aj=x+;if(aj=m)aj=-1; x=1;y-;if(!y)break;elsecoutj+1出局!endl;return (j+1);void main()int n,s,m,y=0;int x;do

10、for(int i=0;i100;i+)ai=0;cout请输入参加游戏的总人数:n;cout请输入开始人的位置与报数长度:s;cinm;x=josephus(n,s,m);coutx胜出!endl;cout请选择:endl;cout1.重新游戏。 2.退出程序。:y;while(y=1);getch();运行结果:(2)提高:#includeusing namespace std;typedef struct LNodestruct LNode *next;int a;LNode,*LinkList;class JosephouCircle /定义一个类包括三个元素public:void SetValue();void PickOut();private:int n;int s;int m;void JosephouCircle:SetValue() /设置初值的大小cout请输入参加游戏的总人数:endl;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号