实验一线性表操作实验研究分析报告Word下载.docx
《实验一线性表操作实验研究分析报告Word下载.docx》由会员分享,可在线阅读,更多相关《实验一线性表操作实验研究分析报告Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
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!
endl;
}
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!
//i值不合法
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;
}//ListInsert_Sq
voidListDelete_Sq(SqList&
L,inti,int&
j)//在顺序线性表L中删除第i个元素,并用j返回其值
=ListInsert_Sq(L)
if((i<
1)||(i>
L.length))
int*p=&
//p为被删除元素地位置
j=*p;
//被删除元素地值赋给j
int*q=L.elem+L.length-1;
//表尾元素地位置
for(++p;
p<
++p)
*(p-1)=*p;
--L.listsize;
//被删除元素之后地元素左移
//表长减1
}//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++;
=L.length)
returni;
return0;
}//LocateElem_Sq
voiddisp(SqList&
L)
for(inti=0;
i<
L.listsize;
i++)
*p<
"
;
voidmain()
SqListList;
InitList_Sq(List);
int*p=List.elem;
intm,n,j,k,x,y;
List.listsize;
cin>
>
x;
*p=x;
List.length++;
插入请按1;
删除请按2;
寻找请按3"
for(k=0;
k=10;
k++)
y;
if(y==1)
{
cout<
请输入插入位置和元素地值:
cin>
m>
n;
ListInsert_Sq(List,m,n);
disp(List);
}
elseif(y==2)
请输入要删除第几个元素:
m;
ListDelete_Sq(List,m,j);
j<
else
请输入所要查找地元素:
LocateElem_Sq(List,m)<
运行结果:
加强、提高题:
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<
inta[100];
intjosephus(intn,ints,intm)
(n*s*m))
输入错误!
intx=1,y=n;
inti=s-1;
intj;
while(y)
for(i=0;
if(a[i]+1)
a[i]=x++;
if(a[i]==m)
{a[i]=-1;
cout<
i+1<
出局!
x=1;
y--;
}
for(j=0;
j++)
if(a[j]+1)
a[j]=x++;
if(a[j]==m)
{
a[j]=-1;
x=1;
if(!
y)
break;
else
cout<
j+1<
return(j+1);
intn,s,m,y=0;
intx;
do{
for(inti=0;
100;
{a[i]=0;
请输入参加游戏地总人数:
请输入开始人地位置与报数长度:
s;
x=josephus(n,s,m);
x<
胜出!
请选择:
1.重新游戏.2.退出程序.:
}while(y==1);
getch();
(2)提高:
iostream>
usingnamespacestd;
typedefstructLNode
structLNode*next;
inta;
}LNode,*LinkList;
classJosephouCircle//定义一个类包括三个元素
public:
voidSetValue();
voidPickOut();
private:
intn;
ints;
intm;
};
voidJosephouCircle:
:
SetValue()//设置初值地大小
cin>
请输入开始人地位置:
请输入报数长度:
PickOut()
LinkListL;
LNode*p,*q;
intj,k;
L=(LinkList)malloc(sizeof(LNode));
L->
next=NULL;
LNode*r;
r=L;
for(inti=1;
=n;
++i)//构建一个循环链表
p=(LinkList)malloc(sizeof(LNode));
p->
a=i;
r->
next=p;
r=p;
p->
next=L->
next;
p=L->
j=1;
while(p&
s)
p=p->
++j;
for(i=1;
i++)
for(j=1;
m-1;
p=p->
q=p->
p->
next=q->
p=q->
k=q->
a;
输出地结果为:
k<
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。