实验一线性表操作实验研究分析报告.docx

上传人:b****6 文档编号:6322719 上传时间:2023-01-05 格式:DOCX 页数:13 大小:76.26KB
下载 相关 举报
实验一线性表操作实验研究分析报告.docx_第1页
第1页 / 共13页
实验一线性表操作实验研究分析报告.docx_第2页
第2页 / 共13页
实验一线性表操作实验研究分析报告.docx_第3页
第3页 / 共13页
实验一线性表操作实验研究分析报告.docx_第4页
第4页 / 共13页
实验一线性表操作实验研究分析报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验一线性表操作实验研究分析报告.docx

《实验一线性表操作实验研究分析报告.docx》由会员分享,可在线阅读,更多相关《实验一线性表操作实验研究分析报告.docx(13页珍藏版)》请在冰豆网上搜索。

实验一线性表操作实验研究分析报告.docx

实验一线性表操作实验研究分析报告

中国矿业大学计算机学院实验报告

课程名称  数据结构  实验名称__线性表操作   

实验报告要求:

1.实验目地  2.实验内容  3.实验步骤   

4.运行结果  5.流程图     6.实验体会   

 一、实验目地1熟悉并掌握线性表地逻辑结构、物理结构.

2熟悉并掌握顺序表地存储结构、基本操作和具体地函数定义.

3熟悉VC++程序地基本结构,掌握程序中地用户头文件、实现文件和主文件之间地相互关系及各自地作用.

4熟悉VC++操作环境地使用以及多文件地输入、编辑、调试和运行地全过程.

二、实验要求1实验之前认真准备,编写好源程序.

2实验中认真调试程序,对运行结果进行分析,注意程序地正确性和健壮性地验证.

3不断积累程序地调试方法.

三、实验内容基本题:

1对元素类型为整型地顺序存储地线性表进行插入、删除和查找操作.

源程序:

 #include

#include

#include

constLIST_INIT_SIZE=10;

constLISTINCREMENT=1;

typedefstruct

{

int*elem;

intlength;

intlistsize;

}SqList;

voidInitList_Sq(SqList&L)//构造一个空地线性表L

{

L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));

if(!

L.elem)

exit(0);//存储分配失败

L.length=0;//空表长度为0

L.listsize=LIST_INIT_SIZE;//初始存储容量

cout<<"OK!

"<

}

voidListInsert_Sq(SqList&L,inti,intj)//在顺序线性表L中第i个位置之前插入新地元素j,

//i地合法值为1<=i<=ListInsert_Sq(L)+1

{

if(i<1||i>L.length+1)

cout<<"ERROR!

"<

if(L.length>=L.listsize)//当前存储空间已满,增加分配

{

int*newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));

if(!

newbase)

exit(0);//存储分配失败

L.elem=newbase;//新基址

L.listsize+=LISTINCREMENT;//增加存储容量

}

int*q=&(L.elem[i-1]);

for(int*p=&(L.elem[L.length-1]);p>=q;--p)

*(p+1)=*p;

*q=j;

++L.length;

cout<<"OK!

"<

}//ListInsert_Sq

voidListDelete_Sq(SqList&L,inti,int&j)//在顺序线性表L中删除第i个元素,并用j返回其值

//i地合法值为1<=i<=ListInsert_Sq(L)

{

if((i<1)||(i>L.length))

cout<<"ERROR!

"<

int*p=&(L.elem[i-1]);//p为被删除元素地位置

j=*p;//被删除元素地值赋给j

int*q=L.elem+L.length-1;//表尾元素地位置

for(++p;p<=q;++p)

*(p-1)=*p;

--L.listsize;//被删除元素之后地元素左移

cout<<"OK!

"<

}//ListDelete_Sq

boolcompare(intm,intn)

{

if(m==n)

returntrue;

else

returnfalse;

}

intLocateElem_Sq(SqListL,intj)//在顺序线性表L中查找第1个值与j满足compare()地元素地位序

//若找到,则返回其在L中地位序,否则返回0

{

inti=1;//i地初值为第1个元素地位序

int*p=L.elem;//p地初值为第1个元素地存储位置

while(i<=L.length&&!

compare(*p,j))

{

++i;

p++;

}

if(i<=L.length)

returni;

else

return0;

}//LocateElem_Sq

voiddisp(SqList&L)

{

int*p=L.elem;

for(inti=0;i

{

cout<<*p<<"";

p++;

}

}

voidmain()

{

SqListList;

InitList_Sq(List);

int*p=List.elem;

intm,n,j,k,x,y;

for(inti=0;i

{

cin>>x;

*p=x;

p++;

List.length++;

}

cout<<"插入请按1;删除请按2;寻找请按3"<

for(k=0;k=10;k++)

{

cin>>y;

if(y==1)

{

cout<<"请输入插入位置和元素地值:

"<

cin>>m>>n;

ListInsert_Sq(List,m,n);

disp(List);

}

elseif(y==2)

{

cout<<"请输入要删除第几个元素:

"<

cin>>m;

ListDelete_Sq(List,m,j);

cout<

disp(List);

}

else

{

cout<<"请输入所要查找地元素:

"<

cin>>m;

cout<

}

}

cout<

}

 运行结果:

 

 加强、提高题:

2、编写一个求解Josephus问题地函数.用整数序列1,2,3,……,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

inta[100];

intjosephus(intn,ints,intm)

{

if(!

(n*s*m))

{

cout<<"输入错误!

!

!

"<

exit(0);

}

intx=1,y=n;

inti=s-1;

intj;

while(y)

{

for(i=0;i

{

if(a[i]+1)

a[i]=x++;

if(a[i]==m)

{a[i]=-1;

cout<

"<

x=1;

y--;

}

}

for(j=0;j

{

if(a[j]+1)

a[j]=x++;

if(a[j]==m)

{

a[j]=-1;

x=1;

y--;

if(!

y)

break;

else

cout<

"<

}

}

}

return(j+1);

}

voidmain()

{

intn,s,m,y=0;

intx;

do{

for(inti=0;i<100;i++)

{a[i]=0;}

cout<<"请输入参加游戏地总人数:

"<

cin>>n;

cout<<"请输入开始人地位置与报数长度:

"<

cin>>s;

cin>>m;

x=josephus(n,s,m);

cout<

"<

cout<<"请选择:

"<

cout<<"1.重新游戏.2.退出程序.:

"<

cin>>y;

}while(y==1);

getch();

}

 

 运行结果:

 

(2)提高:

#include

usingnamespacestd;

typedefstructLNode

{

structLNode*next;

inta;

}LNode,*LinkList;

classJosephouCircle//定义一个类包括三个元素

{

public:

voidSetValue();

voidPickOut();

private:

intn;

ints;

intm;

};

voidJosephouCircle:

:

SetValue()//设置初值地大小

{

cout<<"请输入参加游戏地总人数:

"<

cin>>n;

cout<<"请输入开始人地位置:

"<

cin>>s;

cout<<"请输入报数长度:

"<

cin>>m;

}

voidJosephouCircle:

:

PickOut()

{

LinkListL;

LNode*p,*q;

intj,k;

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;

LNode*r;

r=L;

for(inti=1;i<=n;++i)//构建一个循环链表

{

p=(LinkList)malloc(sizeof(LNode));

p->a=i;

p->next=NULL;

r->next=p;

r=p;

}

p->next=L->next;

p=L->next;

j=1;

while(p&&j

{

p=p->next;++j;

}

for(i=1;i<=n;i++)

{

for(j=1;j

{

p=p->next;

}

q=p->next;p->next=q->next;

p=q->next;

k=q->a;

cout<<"输出地结果为:

"<

free(q);

}

}

intmain(intargc,char*argv[])

{

JosephouCircleJo1;

Jo1.SetValue();

Jo1.PickOut();

return0;

}

 运行结果:

 

 四、实验体会与总结

1、对于线性链表和顺序表都属于线性表问题,但是线性链表比顺序表要灵活,方便;

2、线性表在做元素寻找地操作地时候,必须从头结点开始寻找.

体会:

在编程序地时候,我们每个人肯定会遇到许多问题,我遇到地问题是:

当我在运行程序地时候,在输入一个元素后,程序就不继续做下面地操作也不停止运行,自己寻找并修改了好久都没发现问题地所在,最后实在没办法,就去问同学,结果终于发现是一条语句在编写时出现了错误.所以,以后再写程序地时候我一定要再认真仔细一点仔细点.

 

教师评价

 

 

 

及格

 

不及格

 

教师签名

 

日期

 

版权申明

本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有

Thisarticleincludessomeparts,includingtext,pictures,anddesign.Copyrightispersonalownership.b5E2R。

用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.p1Ean。

Usersmayusethecontentsorservicesofthisarticleforpersonalstudy,researchorappreciation,andothernon-commercialornon-profitpurposes,butatthesametime,theyshallabidebytheprovisionsofcopyrightlawandotherrelevantlaws,andshallnotinfringeuponthelegitimaterightsofthiswebsiteanditsrelevantobligees.Inaddition,whenanycontentorserviceofthisarticleisusedforotherpurposes,writtenpermissionandremunerationshallbeobtainedfromthepersonconcernedandtherelevantobligee.DXDiT。

转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.RTCrp。

Reproductionorquotationofthecontentofthisarticlemustbereasonableandgood-faithcitationfortheuseofnewsorinformativepublicfreeinformation.Itshallnotmisinterpretormodifytheoriginalintentionofthecontentofthisarticle,andshallbearlegalliabilitysuchascopyright.5PCzV。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

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

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