数据结构实验答案及解析.docx

上传人:b****6 文档编号:8679475 上传时间:2023-02-01 格式:DOCX 页数:64 大小:615.57KB
下载 相关 举报
数据结构实验答案及解析.docx_第1页
第1页 / 共64页
数据结构实验答案及解析.docx_第2页
第2页 / 共64页
数据结构实验答案及解析.docx_第3页
第3页 / 共64页
数据结构实验答案及解析.docx_第4页
第4页 / 共64页
数据结构实验答案及解析.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

数据结构实验答案及解析.docx

《数据结构实验答案及解析.docx》由会员分享,可在线阅读,更多相关《数据结构实验答案及解析.docx(64页珍藏版)》请在冰豆网上搜索。

数据结构实验答案及解析.docx

数据结构实验答案及解析

 

《数据结构》实验指导

2013/2014学年第2学期

姓名:

______________

学号:

_________

班级:

______________

指导教师:

______________

 

潍坊学院计算机工程学院

2014

预备实验C语言的函数数组指针结构体知识

一、实验目的

1、复习C语言中函数、数组、指针和结构体的概念。

2、熟悉利用C语言进行程序设计的一般方法。

二、实验内容和要求

1、调试程序:

输出100以内所有的素数(用函数实现)。

#include

/*判断一个数是否为素数*/

intisprime(intn){

for(intm=2;m*m<=n;m++){

if(n%m==0)return0;

return1;

}

/*输出100以内所有素数*/

intmain(){

inti;

for(i=2;i<100;i++)

if(isprime(i)==1)printf(“%4d”,i);

return0;

}

运行结果:

2、调试程序:

对一维数组中的元素进行逆序排列。

#include

#defineN10

intmain(){

inta[N]={0,1,2,3,4,5,6,7,8,9},i,temp;

printf(“theoriginalArrayis:

\n”);

for(i=0;i

printf(“%4d”,a[i]);

for(i=0;i

temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp;

}

printf(“\nthechangedArrayis:

\n”);

for(i=0;i

printf(“%4d”,a[i]);

return0;

}

运行结果:

3、调试程序:

在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的一个鞍点。

要求从键盘上输入一个二维数组,当鞍点存在时,把鞍点找出来。

#include

#defineM3

#defineN4

intmain(){

inta[M][N],i,j,k;

printf(“请输入二维数组的数据:

\n”);

for(i=0;i

for(j=0;j

scanf(“%d”,&a[i][j]);

for(i=0;i

for(j=0;j

printf(“%4d”,a[i][j]);

printf(“\n”);

}

for(i=0;i

k=0;

for(j=1;j

if(a[i][j]>a[i][k])

k=j;

for(j=0;j

if(a[j][k]

break;

if(j==M)/*在第i行找到鞍点*/

printf(“%d,%d,%d\n”),a[i][k],i,k);

}

return0;

}

运行结果:

4、调试程序:

利用指针输出二维数组的元素。

#include

intmain(){

inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int*p;

for(p=a[0];p

if((p-a[0])%4==0)printf(“\n”);

printf(%4d”,*p);

}

return0;

}

运行结果:

5、调试程序:

输入10个学生的成绩,每个学生成绩包括学号、姓名和三门课的成绩。

要求打印出三门课的平均成绩及成绩最高者的姓名和成绩。

#include

#defineN10;

structstudent{

charnum[6];/*学号*/

charname[8];/*姓名*/

intscore[3];/*成绩*/

floatavr;/*平均成绩*/

}stu[N];

intmain(){

inti,j,max,maxi,sum;

floataverage;

for(i=0;i

printf(“\n请输入第%d学生的成绩:

\n”,i+1);

printf(“学号:

”);

scanf(“%s”,stu[i].num);

printf(“姓名”);

scanf(“%s”,stu[i].name);

for(j=0;j<3;j++){

printf(“成绩%d”,j+1);

scanf(“%d”,&stu[i].score[j]);

}

}

average=0;

max=0;

maxi=0;

for(i=0;i

sum=0;

for(j=0;j<3;j++)

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);

for(i=0;i<10;i++){

printf(“%8s%10s”,stu[i].num,stu[i].name);

for(j=0;j<3;j++)

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);

return0;

}

运行结果

 

3、?

?

小?

?

C?

言中函?

、?

?

、指?

和?

构体的概念,有了?

一步的加深。

并且可以利用C?

言?

行初步程序?

?

 

四、教?

?

?

 

?

?

一?

序表与?

一、?

?

目的

1、掌握?

性表中元素的前?

、后?

的概念。

2、掌握?

序表与?

表的建立、插入元素、?

除表中某元素的算法。

3、?

?

性表相?

算法的?

?

复?

度?

行分析。

4、理解?

序表、?

表?

据?

构的特?

(优缺?

)。

二、?

?

?

容和要求

1、?

?

下面程序,在?

?

?

填?

函?

的基本功能。

并?

行程序,?

出?

果。

#include

#include

#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;

L->length=0;

L->listsize=INIT_SIZE;

returnOK;

}/*InitList*/

intCreateList_sq(Sqlist*L,intn){

ElemTypee;

inti;

for(i=0;i

printf("inputdata%d",i+1);

scanf("%d",&e);

if(!

ListInsert_sq(L,i+1,e))

returnERROR;

}

returnOK;

}/*CreateList*/

/*?

出?

序表中的元素*/

intPrintList_sq(Sqlist*L){

inti;

for(i=1;i<=L->length;i++)

printf("%5d",L->slist[i-1]);

returnOK;

}/*PrintList*/

intListInsert_sq(Sqlist*L,inti,ElemTypee){

intk;

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

returnERROR;

if(L->length>=L->listsize){

L->slist=(ElemType*)realloc(L->slist,

(INIT_SIZE+INCREM)*sizeof(ElemType));

if(!

L->slist)

returnERROR;

L->listsize+=INCREM;

}

for(k=L->length-1;k>=i-1;k--){

L->slist[k+1]=k;

}

L->slist[i-1]=e;

L->length++;

returnOK;

}/*ListInsert*/

/*在?

序表中?

除第i?

元素*/

intListDelete_sq(Sqlist*L,inti)

{

if((i<1)||(i>L->length))returnERROR;

for(p=i-1;p<->length-1;p++)

L->slist[p]=L->slist[p+1];

L->length--;

returnOK;

}

/*在?

序表中查找指定值元素,返回其序?

*/

intListLocate(Sqlist*L,ElemTypee){

}

intmain(){

Sqlistsl;

intn;

printf("pleaseinputn:

");/*?

入?

序表的元素?

?

*/

scanf("%d",&n);

if(n>0){

printf("\n1-CreateSqlist:

\n");

InitList_sq(&sl);

CreateList_sq(&sl,n);

printf("\n2-PrintSqlist:

\n");

PrintList_sq(&sl);

}else

printf("ERROR");

return0;

}

●算法分析与?

行?

pleaseinputn:

5

1-CreateSqlist:

inputdata10

inputdata25

inputdata38

inputdata43

inputdata56

2-PrintSqlist:

05836Pressanykeytocontinue

2、?

第1?

?

充?

除和查找功能函?

,并在主函?

中?

充代?

?

?

算法的正确性。

算法代?

intListDelete_sq(Sqlist*L,inti)

{intp;

if((i<1)||(i>L->length))returnERROR;

for(p=i-1;plength-1;p++)

{L->slist[p]=L->slist[p+1];

}

L->length--;

returnOK;

}

/*在?

序表中查找指定值元素,返回其序?

*/

intListLocate(Sqlist*L,ElemTypee)

{

inti=0;

while((i<=L->length)&&(L->slist[i]!

=e))

i++;

if(i<=L->length)

return(i+1);

else

return(-1);

}

 

3、?

?

下面程序,在?

?

?

填?

函?

的基本功能。

并?

行程序,?

出?

果。

#include

#include

#defineERROR0

#defineOK1

typedefintElemType;/*定?

表元素的?

型*/

typedefstructLNode{/*?

性表的?

?

表存?

*/

ElemTypedata;

structLNode*next;

}LNode,*LinkList;

LinkListCreateList(intn);/构造?

序表的?

度*/

voidPrintList(LinkListL);/*?

出?

?

?

?

?

?

表的所有元素*/

intGetElem(LinkListL,inti,ElemType*e);/*在?

序?

性表L中,?

第i?

元素存在?

,?

其?

值?

e*/

 

LinkListCreateList(intn){

LNode*p,*q,*head;

inti;

head=(LinkList)malloc(sizeof(LNode));head->next=NULL;

p=head;

for(i=0;i

q=(LinkList)malloc(sizeof(LNode));printf("inputdata%i:

",i+1);

scanf("%d",&q->data);/*?

入元素值*/

q->next=NULL;/*?

?

指?

域置空*/

p->next=q;/*新?

?

?

在表末尾*/

p=q;

}

returnhead;

}/*CreateList*/

voidPrintList(LinkListL){

LNode*p;

p=L->next;/*p指向?

?

表的第1?

元素*/

while(p!

=NULL){

printf("%5d",p->data);

p=p->next;

}

}/*PrintList*/

intGetElem(LinkListL,inti,ElemType*e){

LNode*p;intj=1;

p=L->next;

while(p&&j

p=p->next;j++;

}

if(!

p||j>i)

returnERROR;

*e=p->data;

returnOK;

}/*GetElem*/

intmain(){

intn,i;ElemTypee;

LinkListL=NULL;/*定?

指向?

?

表的指?

*/

printf("pleaseinputn:

");/*?

入?

?

表的元素?

?

*/

scanf("%d",&n);

if(n>0){

printf("\n1-CreateLinkList:

\n");

L=CreateList(n);

printf("\n2-PrintLinkList:

\n");

PrintList(L);

printf("\n3-GetElemfromLinkList:

\n");

printf("inputi=");

scanf("%d",&i);

if(GetElem(L,i,&e))

printf("No%iis%d",i,e);

else

printf("notexists");

}else

printf("ERROR");

return0;

}

●算法分析与?

行?

pleaseinputn:

5

1-CreateLinkList:

inputdata1:

8

inputdata2:

6

inputdata3:

3

inputdata4:

5

inputdata5:

4

2-PrintLinkList:

86354

3-GetElemfromLinkList:

inputi=2

No2is6Pressanykeytocontinue

 

4、?

第3?

?

充插入功能函?

和?

除功能函?

并在主函?

中?

充代?

?

?

算法的正确性。

●算法代?

intListInsert_sq(LNode*L,inti,ElemTypee){

intk;

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

returnERROR;

if(L->length>=L->listsize){

L->data=(ElemType*)realloc(L->data,

(INIT_SIZE+INCREM)*sizeof(ElemType));

if(!

L->data)

returnERROR;

L->listsize+=INCREM;

}

#include

#include

#defineERROR0

#defineOK1

typedefintElemType;/*定?

表元素的?

型*/

typedefstructLNode{/*?

性表的?

?

表存?

*/

ElemTypedata;

structLNode*next;

}LNode,*LinkList;

LinkListCreateList(intn);/*

 

以下?

?

做?

?

5、循?

?

表的?

用(?

瑟夫回?

?

?

n?

?

据元素构成一?

?

,?

?

中任意位置?

始?

?

,?

到m?

?

元素?

表中取出,重复上述?

程,直至表中只剩下一?

元素。

提示:

用一?

?

?

?

?

的循?

?

?

表?

?

?

n?

元素的存?

●算法代?

 

6、?

一?

?

?

?

的?

?

表,?

?

算法?

表中值相同的元素?

保留一?

?

?

提示:

指?

p?

?

表的第一?

元素?

始,利用指?

q?

指?

p位置?

始向后搜索整?

?

表,?

除与之值相同的元素;指?

p?

?

指向下一?

元素,?

始下一?

的?

除,直至p==null?

至,既完成了?

整?

?

表元素的?

除相同值。

●算法代?

 

三、?

?

小?

具体的掌握?

性表中元素的前?

、后?

的概念。

以及?

序表与?

表的建立、插入元素、?

除表中某元素的算法。

并?

?

了?

?

性表相?

算法的?

?

复?

度?

行分析。

 

四、教?

?

?

?

?

二?

和?

一、?

?

目的

1、掌握?

的?

构特性及其入?

,出?

操作;

2、掌握?

列的?

构特性及其入?

、出?

的操作,掌握循?

?

列的特?

及其操作。

二、?

?

?

容和要求

1、?

?

下面程序,?

函?

Push和函?

Pop?

充完整。

要求?

入元素序列12345e,?

行?

果如下所示。

#include

#include

#defineERROR0

#defineOK1

#defineSTACK_INT_SIZE10/*存?

空?

初始分配量*/

#defineSTACKINCREMENT5/*存?

空?

分配增量*/

typedefintElemType;/*定?

元素的?

型*/

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));

if(!

S->base)returnERROR;

S->top=S->base;

S->stacksize=STACK_INT_SIZE;

returnOK;

}/*InitStack*/

intPush(SqStack*S,ElemTypee){

}/*Push*/

intPop(SqStack*S,ElemType*e){

}/*Pop*/

intCreateStack(SqStack*S){

inte;

if(InitStack(S))

printf("InitSuccess!

\n");

else{

printf("InitFail!

\n");

returnERROR;

}

printf("inputdata:

(Terminatedbyinputingacharacter)\n");

while(scanf("%d",&e))

Push(S,e);

returnOK;

}/*CreateStack*/

voidPrintStack(SqStack*S){

ElemTypee;

while(Pop(S,&e))

printf("%3d",e);

}/*Pop_and_Print*/

intmain(){

SqStackss;

printf("\n1-createStack\n");

CreateStack(&ss);

printf("\n2-Pop&Print\n");

PrintStack(&ss);

return0;

}

●算法分析:

?

入元素序列12345,?

什么?

出序列?

54321?

体?

了?

的什么特性?

 

2、在第1?

的程序中

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

当前位置:首页 > 高中教育 > 高考

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

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