数据结构实习题答案.docx
《数据结构实习题答案.docx》由会员分享,可在线阅读,更多相关《数据结构实习题答案.docx(21页珍藏版)》请在冰豆网上搜索。
数据结构实习题答案
《数据结构》上机实验的目的和要求
通过上机实验加深对课程内容的理解,增加感性认识,提高软件设计、编写及调试程序的能力。
要求所编的程序能正确运行,并提交实验报告。
实验报告的基本要求为:
1、需求分析:
陈述程序设计的任务,强调程序要做什么,明确规定:
(1)输入的形式和输出值的范围;
(2)输出的形式;
(3)程序所能达到的功能;
(4)测试数据:
包括正确的输入输出结果和错误的输入及输出结果。
2、概要设计:
说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。
3、详细设计:
提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。
4、调试分析:
(1)调试过程中所遇到的问题及解决方法;
(2)算法的时空分析;
(3)经验与体会。
5、用户使用说明:
说明如何使用你的程序,详细列出每一步操作步骤。
6、测试结果:
列出对于给定的输入所产生的输出结果。
若有可能,测试随输入规模的增长所用算法的实际运行时间的变化。
实验一、线性表的基本操作
一、目的:
了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。
二、内容
(题目)
三、分析过程
四、设计过程
五、实现
六、测试
七、性能分析
范例:
1.约瑟夫环
#defineNULL0
typedefstructNode
{
intbianhao;
intmima;
structNode*next;
}Node;
Node*CreatFromTail(intn)
{
Node*l,*r,*s;
inti,mima;
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
printf("inputothermima\n");
for(i=1;i<=n;i++)
{
scanf("%d",&mima);
s=(Node*)malloc(sizeof(Node));
s->bianhao=i;
s->mima=mima;
r->next=s;
r=s;
}
r->next=l->next;
returnl;
}
DeleNode(intm,intn,Node*l)
{
inti,j;
Node*p,*q;
p=l;
i=1;
while(i<=n)
{
for(j=1;j<=m-1;j++)p=p->next;
q=p->next;
p->next=q->next;
printf("chuduidrenshi%d,qimimashi%d\n",q->bianhao,q->mima);i++;
m=q->mima;
free(q);
}
return;
}
main()
{
Node*l;
intm,n;
printf("inputnumberofpeopleandthefirstmima\n");
scanf("%d,%d",&n,&m);
l=CreatFromTail(n);
DeleNode(m,n,l);
}
2.回文判断
方法1:
#include"stdio.h"
main()
{
chara[100],c;
intlen;
inti,j,top;
i=0;
while((c=getchar())!
='@')
{
a[i]=c;
i++;
}
for(j=0;j
printf("%c",a[j]);
top=i-1;
j=0;
while(top>=0)
{
if(a[top]!
=a[j])
{
printf("isnot");
return;
}
top--;
j++;
}
printf("is");
}
方法2:
#include"stdio.h"
#defineTRUE1
#defineFALSE0
#definestacksize100
#definequeuesize100
typedefstruct
{
charelem[queuesize];
intfront,rear;
}sequeue;
typedefstruct
{
charelem[stacksize];
inttop;
}seqstack;
intEnterQueue(sequeue*q,charx)
{
if((q->rear+1)%queuesize==q->front)return(FALSE);
q->elem[q->rear]=x;
q->rear=(q->rear+1)%queuesize;
return(TRUE);
}
chardelete(sequeue*q)
{
charx;
if(q->rear==q->front)return(FALSE);
x=q->elem[q->front];
q->front=(q->front+1)%queuesize;
return(x);
}
intpush(seqstack*s,charx)
{
if(s->top==stacksize-1)return(FALSE);
s->top++;
s->elem[s->top]=x;
}
charpop(seqstack*s)
{
charx;
if(s->top==-1)return(FALSE);
else
{
x=s->elem[s->top];
s->top--;
return(x);
}
}
main()
{
charc;
intlen1=0,len2=0;
seqstack*s;
sequeue*q;
charx1,x2;
q=(sequeue*)malloc(sizeof(sequeue));
q->front=q->rear=0;
while((c=getchar())!
='&')
{
EnterQueue(q,c);len1++;
}
s=(seqstack*)malloc(sizeof(seqstack));
s->top=-1;
while((c=getchar())!
='@')
{
push(s,c);len2++;
}
if(len1!
=len2)printf("isnot");
else
{
while(s->top>=0)
{
x1=pop(s);x2=delete(q);
if(x1!
=x2){printf("isnot");return;}
}
printf("is");
}
}
3.串操作(92页实习题1)
方法1:
#include"stdio.h"
main()
{
chars[100],t[100],r[100],c;
inti,j,k,m,len1,len2,len3;
gets(s);
gets(t);
len1=0;
while(s[len1]!
='\0')len1++;
len2=0;
while(t[len2]!
='\0')len2++;
len3=0;
i=0;k=0;
while(i{
j=0;
while((j=t[j]))
j++;
if(j>=len2)
{
r[len3]=s[i];
m=0;
while((m=r[len3])m++;
if(m==len3)printf("%czaiszhongshoucichuxiandeweizhishi%d\n",r[len3],i);
len3++;
}
i++;
}
for(k=0;kprintf("%c",r[k]);
}
方法2:
#include"string.h"
#defineMaxlen100
typedefstruct{
charch[Maxlen];
intlen;
}SString;
concat(SString*s,SStringt)
{
inti,flag;
if(s->len+t.len<=Maxlen)
{
for(i=s->len;ilen+t.len;i++)
s->ch[i]=t.ch[i-s->len];
s->len+=t.len;flag=1;
}
elseif(s->len{
for(i=s->len;is->ch[i]=t.ch[i-s->len];
s->len=Maxlen;flag=0;
}
elseflag=0;
return(flag);
}
len(SStrings)
{
return(s.len);
}
SubString(SString*sub,SStrings,intpos,intlen)
{
inti;
if(pos<0||pos>s.len||len<1||len>s.len-pos)
{
sub->len=0;
return(0);
}
else
{
for(i=0;isub->ch[i]=s.ch[i+pos];
sub->ch[i]='\0';
sub->len=len;
return1;
}
}
equal(SStrings,SStringt)
{
inti;
if(s.len!
=t.len)return0;
else
{
for(i=0;iif(s.ch[i]!
=t.ch[i])return0;
return1;
}
}
StrIndex(SStrings,intpos,SStringt)
{
inti,j;
if(t.len==0)return0;
i=pos;
j=0;
while(iif(s.ch[i]==t.ch[j]){i++;j++;}
else{i=i-j+1;j=0;}
if(j>=t.len)return(i-j);
elsereturn0;
}
main()
{
SStrings,t,x,r={"",0};
SString*sub1,*sub2,*sub3;
inti,j,k;
sub1=(SString*)malloc(sizeof(SString));
sub2=(SString*)malloc(sizeof(SString));
sub3=(SString*)malloc(sizeof(SString));
gets(s.ch);
s.len=strlen(s.ch);
gets(t.ch);
t.len=strlen(t.ch);
/*SubString(sub1,s,1,1);
c