数据结构实验答案解析Word文档格式.docx
《数据结构实验答案解析Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验答案解析Word文档格式.docx(64页珍藏版)》请在冰豆网上搜索。
#defineM3
#defineN4
inta[M][N],i,j,k;
printf(“请输入二维数组的数据:
M;
for(j=0;
j<
j++)
scanf(“%d”,&
a[i][j]);
i++){/*输出矩阵*/
printf(“%4d”,a[i][j]);
printf(“\n”);
i++){
k=0;
for(j=1;
j++)/*找出第i行的最大值*/
if(a[i][j]>
a[i][k])
k=j;
j++)/*判断第i行的最大值是否为该列的最小值*/
if(a[j][k]<
break;
if(j==M)/*在第i行找到鞍点*/
printf(“%d,%d,%d\n”),a[i][k],i,k);
4、调试程序:
利用指针输出二维数组的元素。
inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int*p;
for(p=a[0];
p<
a[0]+12;
p++){
if((p-a[0])%4==0)printf(“\n”);
printf(%4d”,*p);
5、调试程序:
输入10个学生的成绩,每个学生成绩包括学号、姓名和三门课的成绩。
要求打印出三门课的平均成绩及成绩最高者的姓名和成绩。
#defineN10;
structstudent{
charnum[6];
/*学号*/
charname[8];
/*姓名*/
intscore[3];
/*成绩*/
floatavr;
/*平均成绩*/
}stu[N];
inti,j,max,maxi,sum;
floataverage;
i++){/*输入10个学生的成绩信息*/
printf(“\n请输入第%d学生的成绩:
\n”,i+1);
printf(“学号:
”);
scanf(“%s”,stu[i].num);
printf(“姓名”);
scanf(“%s”,stu[i].name);
3;
j++){
printf(“成绩%d”,j+1);
stu[i].score[j]);
}
average=0;
max=0;
maxi=0;
i++){/*计算平均成绩,找出成绩最高的学生*/
sum=0;
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>
max){
max=sum;
maxi=i;
average/=10;
printf(“学号姓名成绩1成绩2成绩3平均分\n);
10;
printf(“%8s%10s”,stu[i].num,stu[i].name);
printf(“%7d”,stu[i].score[j]);
printf(“%6.2f\n”,stu[i].avr);
printf(“平均成绩是:
%5.2f\n”,average);
printf(“最好成绩的学生是:
%s,总分是%d”,stu[maxi].name,max);
运行结果
3、?
?
小?
C?
言中函?
、?
、指?
和?
构体的概念,有了?
一步的加深。
并且可以利用C?
言?
行初步程序?
。
四、教?
一?
序表与?
表
一、?
目的
1、掌握?
性表中元素的前?
、后?
的概念。
2、掌握?
表的建立、插入元素、?
除表中某元素的算法。
性表相?
算法的?
复?
度?
行分析。
4、理解?
序表、?
表?
据?
构的特?
(优缺?
)。
二、?
容和要求
1、?
下面程序,在?
填?
函?
的基本功能。
并?
行程序,?
出?
果。
malloc.h>
#defineERROR0
#defineOK1
#defineINIT_SIZE5/*初始分配的?
序表?
度*/
#defineINCREM5/*溢出?
,?
度的增量*/
typedefintElemType;
/*定?
表元素的?
型*/
typedefstructSqlist{
ElemType*slist;
/*存?
空?
的基地址*/
intlength;
/*?
序表的?
前?
intlistsize;
前分配的存?
*/
}Sqlist;
intInitList_sq(Sqlist*L);
/*初始化?
序表L,并?
其?
0*/
intCreateList_sq(Sqlist*L,intn);
/*构造?
n*/
intListInsert_sq(Sqlist*L,inti,ElemTypee);
/*在?
序?
性表L中第i?
元素之前插入新的元素e*/
intPrintList_sq(Sqlist*L);
序表的元素*/
intListDelete_sq(Sqlist*L,inti);
除第i?
元素*/
intListLocate(Sqlist*L,ElemTypee);
/*查找值?
e的元素*/
intInitList_sq(Sqlist*L){
L->
slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
if(!
L->
slist)returnERROR;
length=0;
listsize=INIT_SIZE;
returnOK;
}/*InitList*/
intCreateList_sq(Sqlist*L,intn){
ElemTypee;
n;
printf("
inputdata%d"
i+1);
scanf("
%d"
&
e);
ListInsert_sq(L,i+1,e))
returnERROR;
}/*CreateList*/
/*?
序表中的元素*/
intPrintList_sq(Sqlist*L){
for(i=1;
=L->
length;
%5d"
L->
slist[i-1]);
}/*PrintList*/
intListInsert_sq(Sqlist*L,inti,ElemTypee){
intk;
if(i<
1||i>
length+1)
returnERROR;
if(L->
length>
listsize){
slist=(ElemType*)realloc(L->
slist,
(INIT_SIZE+INCREM)*sizeof(ElemType));
slist)
listsize+=INCREM;
for(k=L->
length-1;
k>
=i-1;
k--){
slist[k+1]=k;
slist[i-1]=e;
length++;
}/*ListInsert*/
序表中?
intListDelete_sq(Sqlist*L,inti)
{
if((i<
1)||(i>
length))returnERROR;
for(p=i-1;
->
p++)
slist[p]=L->
slist[p+1];
length--;
序表中查找指定值元素,返回其序?
intListLocate(Sqlist*L,ElemTypee){
Sqlistsl;
intn;
pleaseinputn:
"
);
入?
序表的元素?
n);
if(n>
0){
\n1-CreateSqlist:
\n"
InitList_sq(&
sl);
CreateList_sq(&
sl,n);
\n2-PrintSqlist:
PrintList_sq(&
}else
ERROR"
●算法分析与?
行?
果
5
1-CreateSqlist:
inputdata10
inputdata25
inputdata38
inputdata43
inputdata56
2-PrintSqlist:
05836Pressanykeytocontinue
2、?
第1?
充?
除和查找功能函?
,并在主函?
中?
充代?
算法的正确性。
算法代?
:
{intp;
{L->
intListLocate(Sqlist*L,ElemTypee)
inti=0;
while((i<
length)&
&
(L->
slist[i]!
=e))
i++;
if(i<
length)
return(i+1);
else
return(-1);
typedefstructLNode{/*?
性表的?
表存?
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
LinkListCreateList(intn);
/构造?
度*/
voidPrintList(LinkListL);
表的所有元素*/
intGetElem(LinkListL,inti,ElemType*e);
/*在?
性表L中,?
第i?
元素存在?
值?
e*/
LinkListCreateList(intn){
LNode*p,*q,*head;
head=(LinkList)malloc(sizeof(LNode));
head->
next=NULL;
p=head;
q=(LinkList)malloc(sizeof(LNode));
inputdata%i:
q->
data);
入元素值*/
q->
指?
域置空*/
p->
next=q;
/*新?
在表末尾*/
p=q;
returnhead;
voidPrintList(LinkListL){
LNode*p;
p=L->
next;
/*p指向?
表的第1?
while(p!
=NULL){
p->
p=p->
intGetElem(LinkListL,inti,ElemType*e){
intj=1;
while(p&
i){
j++;
p||j>
i)
*e=p->
data;
returnOK;
}/*GetElem*/
intn,i;
ElemTypee;
LinkListL=NULL;
指向?
表的指?
表的元素?
\n1-CreateLinkList:
L=CreateList(n);
\n2-PrintLinkList:
PrintList(L);
\n3-GetElemfromLinkList:
inputi="
i);
if(GetElem(L,i,&
e))
No%iis%d"
i,e);
notexists"
1-CreateLinkList:
inputdata1:
8
inputdata2:
6
inputdata3:
3
inputdata4:
inputdata5:
4
2-PrintLinkList:
86354
3-GetElemfromLinkList:
inputi=2
No2is6Pressanykeytocontinue
4、?
第3?
充插入功能函?
除功能函?
并在主函?
●算法代?
intListInsert_sq(LNode*L,inti,ElemTypee){
data=(ElemType*)realloc(L->
data,
data)
●
/*
以下?
做?
5、循?
表的?
用(?
瑟夫回?
)
n?
据元素构成一?
中任意位置?
始?
到m?
元素?
表中取出,重复上述?
程,直至表中只剩下一?
元素。
提示:
用一?
的循?
元素的存?
6、?
一?
的?
表,?
算法?
表中值相同的元素?
保留一?
p?
表的第一?
始,利用指?
q?
p位置?
始向后搜索整?
除与之值相同的元素;
指向下一?
元素,?
始下一?
除,直至p==null?
至,既完成了?
整?
除相同值。
三、?
具体的掌握?
以及?
了?
二?
列
构特性及其入?
,出?
操作;
列的?
、出?
的操作,掌握循?
列的特?
及其操作。
下面程序,?
Push和函?
Pop?
充完整。
要求?
入元素序列12345e,?
果如下所示。
#defineSTACK_INT_SIZE10/*存?
初始分配量*/
#defineSTACKINCREMENT5/*存?
分配增量*/
元素的?
typedefstruct{
ElemType*base;
ElemType*top;
intstacksize;
前已分配的存?
}SqStack;
intInitStack(SqStack*S);
/*构造空?
intpush(SqStack*S,ElemType*e);
/*入?
intPop(SqStack*S,ElemType*e);
/*出?
intCreateStack(SqStack*S);
建?
voidPrintStack(SqStack*S);
中元素*/
intInitStack(SqStack*S){
S->
base=(ElemType*)malloc(STACK_INT_SIZE*sizeof(ElemType));
S->
base)returnERROR;
top=S->
base;
stacksize=STACK_INT_SIZE;
}/*InitStack*/
intPush(SqStack*S,ElemTypee){
}/*Push*/
intPop(SqStack*S,ElemType*e){
}/*Pop*/
intCreateStack(SqStack*S){
inte;
if(InitStack(S))
InitSuccess!
else{
InitFail!
inputdata:
(Terminatedbyinputingacharacter)\n"
while(scanf("
e))
Push(S,e);
}/*CreateStack*/
voidPrintStack(SqStack*S){
while(Pop(S,&
%3d"
e);
}/*Pop_and_Print*/
SqStackss;
\n1-createStack\n"
CreateStack(&
ss);
\n2-Pop&
Print\n"
PrintStack(&
}
●算法分析:
入元素序列12345,?
什么?
出序列?
54321?
体?
的什么特性?
2、在第1?
的程序中,