当前位置: 简表范文网 > 专题范文 > 公文范文 >

《数据结构》(C语言版)严蔚敏著-数据结构实验指导

| 来源:网友投稿

下面是小编为大家整理的《数据结构》(C语言版)严蔚敏著-数据结构实验指导,供大家参考。

《数据结构》(C语言版)严蔚敏著-数据结构实验指导

 

 《数据结构》(C 语言版)严蔚敏著-数据结构实验指导

 /学年第学期

 姓名:

 学号:

 班级:

 指导教师:

  数学与统计学院

  2022

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

 1、复习C 语言中函数、数组、指针、结构体与共用体等的概念。2、熟悉利用C 语言进行程序设计的一般方法。

 二、实验预习

 说明以下C 语言中的概念 1、函数:

 2、数组:

 3、指针:

 4、结构体

 5、共用体

 三、实验内容和要求

 1、调试程序:输出 100 以内所有的素数(用函数实现)。#include intiprime(intn){/某判断一个数是否为素数某/intm;for(m=2;m 某 m<=n;m++)

 if(n%m==0)return0;return1;

 }

 intmain(){/某输出 100 以内所有素数某/ inti;printf(\for(i=2;i<100;i++) if(iprime(i)==1)printf(\return0; }

 运行结果:

 2、调试程序:对一维数组中的元素进行逆序排列。#include#defineN10intmain(){ 2

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

 printf(\for(i=0;i

 temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp; printf(\for(i=0;i return0;}

 运行结果:

 3、调试程序:在二维数组中,若某一位置上的元素在该行中最大, 而在该列中最小,则该元素即为该二维数组的一个鞍点。要求从键盘上输入一个二维数组,当鞍点存在时,把鞍点找出来。#include

 #defineM3#defineN4intmain(){inta[M][N],i,j,k;printf(\请输入二维数组的数据:\\n\ for(i=0;i for(j=0;j for(j=0;j for(i=0;i /某找出第i 行的最大值某/ if(a[i][j]>a[i][k])k=j; for(j=0;j if(a[j][k]

 /某在第i 行找到鞍点某/ break;if(j==M) printf(\ 3

 }

 return0;}

 运行结果:

 4、调试程序:利用指针输出二维数组的元素。#includeintmain(){ inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int 某 p;

 for(p=a[0];p printf(\ return0;} 运行结果:

 5、调试程序:设有一个教师与学生通用的表格,教师的数据有姓名、年龄、职业、教研室四项,学生有姓名、年龄、专业、班级四项,编程输入人员的数据,再以表格输出。#include #defineN10tructtudent{charname[8];/某姓名某/intage;/某年龄某 /charjob;/某职业或专业,用或t 表示学生或教师某/ union{ intcla;

 /某班级某/

 charoffice[10];/某教研室某/}depa;

 }tu[N];intmain(){ inti;intn; printf(“\\n 请输入人员数(<10):\\n”);canf(“%d”,&n);for(i=0;i canf(\if(tu[i].job==’’)canf(\

 4

 ele

 canf(\}printf(“nameagejobcla/office”);for(i=0;i if(tu[i].job==’’) printf(\ eleprintf(\ }

 }

 四、实验小结五、教师评语5 intmain(){

 SqStack; printf(\CreateStack(&); printf(\PrintStack(&);return0; }算法分析:输入元素序列 12345,为什么输出序列为 54321?体现了栈的什么 特性?

 2、在第 1 题的程序中,编写一个十进制转换为二进制的数制转换算法函数(要求利用栈来实现),并验证其正确性。实现代码 验证

 3、阅读并运行程序,并分析程序功能。#include#include#include#defineM20 #defineelemtypechartypedeftruct{ elemtypetack[M];inttop;} tacknode; voidinit(tacknode 某t);

 voidpuh(tacknode 某t,elemtype 某);voidpop(tacknode 某t);

 16

 voidinit(tacknode 某t){ t->top=0;} voidpuh(tacknode 某t,elemtype 某){ if(t->top==M) printf(\ele{

 t->top=t->top+1;t->tack[t->top]=某;}} voidpop(tacknode 某t){ if(t->top>0)t->top--; eleprintf(“StackiEmpty!\\n”);} intmain(){ char[M];inti;

 tacknode 某 p; printf(\p=malloc(izeof(tacknode));init(p); printf(\get(); for(i=0;i if([i]=="(") puh(p,[i]);if([i]==")")pop(p);} if(p->top==0) printf(\ele printf(\return0;} 输入:2+((c-d)某 6-(f-7)某a)/6 运行结果:

 输入:a-((c-d)某 6-(/3-某)/2 运行结果:程序的基本功能:

  17

 以下为选做实验:

 4、设计算法,将一个表达式转换为后缀表达式,并按照后缀表达式进行计算,得出表达式得结果。实现代码 5、假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点(不设队头指针),试编写相应的置空队列、入队列、出队列的算法。实现代码:

 四、实验小结五、教师评语

 18

 实验三串的模式匹配一、实验目的

 1、了解串的基本概念

 2、掌握串的模式匹配算法的实现二、实验预习

 说明以下概念 1、模式匹配:

 2、BF 算法:

 3、KMP 算法:

 三、实验内容和要求

 1、阅读并运行下面程序,根据输入写出运行结果。#include#include#defineMA 某SIZE100typedeftruct{ chardata[MA 某SIZE];intlength;}SqString;

 voidtrSub(SqString 某,inttart,intublen,SqString 某ub);/某求子串某/ voidhow_ubString(); printf(\ 19

 for(i=0;ilength&&ilength;i++)if(1->data[i]!=2->data[i]) return1->data[i]-2->data[i];return1->length-2->length;

 printf(\get(1.data); 1.length=trlen(1.data);printf(\get(2.data); 2.length=trlen(2.data); printf(\ele printf(\ printf(\} voidtrSub(SqString 某,inttart,intublen,SqString 某ub){ inti; if(tart<1||tart>->length||ublen>->length-tart+1){ub- >length=0;}

 for(i=0;i

 ub->data[i]=->data[tart+i-1];ub->length=ublen;} voidhow_ubString(){SqString,ub; inttart,ublen,i; printf(\printf(\get(.data);

 .length=trlen(.data);printf(\canf(\ printf(\canf(\ trSub(&,tart,ublen,&ub);if(ub.length==0)printf(\ele{ printf(\for(i=0;i

 printf(\} printf(\ 20 }

 intmain(){intn;do{ printf(\printf(\printf(\printf(\printf(\canf(\getchar(); witch(n){ }while(n);return0;} 运行程序 输入:1 1

 tudenttudent

 2 2

  运行结果:

 2、实现串的模式匹配算法。补充下面程序,实现串的BF 和 KMP 算法。#include#include#defineMA 某SIZE100typedeftruct{ chardata[MA 某SIZE];intlength;

 }SqString;

 intinde 某_bf(SqString 某,SqString 某t,inttart);

 21

 voidgetNe 某t(SqString 某t,intne 某t[]);

 intinde 某_kmp(SqString 某,SqString 某t,inttart,intne 某t[]);voidhow_inde 某(); intinde 某_bf(SqString 某,SqString 某t,inttart){ 补充代码 } voidgetNe 某t(SqString 某t,intne 某t[]){inti=0,j=-1;ne 某t[0]=-1; while(ilength){

 if((j==-1)||(t->data[i]==t->data[j])){ i++;j++;ne 某 t[i]=j;}ele j=ne 某t[j];}}

 intinde 某_kmp(SqString 某,SqString 某t,inttart,intne 某t[]){补充代码 } voidhow_inde 某(){SqString,t; intk,ne 某t[MA 某SIZE]={0},i; printf(\printf(\ 22

 get(.data);

 .length=trlen(.data);printf(\get(t.data); t.length=trlen(t.data); printf(\canf(\

 printf(\getNe 某t(&t,ne 某t);printf(\printf(\for(i=0;i printf(\printf(\} intmain(){

 how_inde 某();return0;

 }

 输入:

 abcaabbabcabaacbacbaabcabaa1

 运行结果:

 四、实验小结五、教师评语

 23

 实验四二叉树一、实验目的

 1、掌握二叉树的基本特性

 2、掌握二叉树的先序、中序、后序的递归遍历算法 3、理解二叉树的先序、中序、后序的非递归遍历算法 4、通过求二叉树的深度、叶子结点数和层序遍历等算法,理解二叉树的基本特性 二、实验预习

  说明以下概念 1、二叉树:

 2、递归遍历:

 3、非递归遍历:

 4、层序遍历:

 三、实验内容和要求

 1、阅读并运行下面程序,根据输入写出运行结果,并画出二叉树的形态。#include#include#defineMA 某 20 typedeftructBTNode{/某节点结构声明某/chardata;/某节点数据某/ tructBTNode 某lchild; tructBTNode 某rchild;/某指针某/

 }某BiTree;

 voidcreateBiTree(BiTree 某t){/某先序遍历创建二叉树某/char; BiTreeq; printf(\=getche(); if(=="#"){某t=NULL;return;} q=(BiTree)malloc(izeof(tructBTNode)); if(q==NULL){printf(\q->data=; 某 t=q;

 createBiTree(&q->lchild);/某递归建立左子树某 /createBiTree(&q->rchild);/某递归建立右子树某/

 24

 }

 voidPreOrder(BiTreep){/某先序遍历二叉树某/if(p!=NULL){ printf(\PreOrder(p->lchild);PreOrder(p->rchild);}} voidInOrder(BiTreep){/某中序遍历二叉树某/if(p!=NULL){ InOrder(p->lchild);printf(\InOrder(p->rchild);}} voidPotOrder(BiTreep){/某后序遍历二叉树某/if(p!=NULL){ PotOrder(p->lchild);PotOrder(p->rchild);printf(\ }}

 voidPreorder_n(BiTreep){/某先序遍历的非递归算法某 /BiTreetack[MA 某],q;inttop=0,i; for(i=0;i while(q!=NULL){ printf(\ if(q->rchild!=NULL)tack[top++]=q->rchild;if(q- >lchild!=NULL)q=q->lchild;ele if(top>0)q=tack[--top];eleq=NULL;}} voidreleae(BiTreet){/某释放二叉树空间某/if(t!=NULL){ releae(t->lchild);releae(t->rchild);free(t);

 25

 for(i=0;i intmain(){ graphga; inti,j; createGraph(&ga);

 printf(\无向图的邻接矩阵:\\n\ for(i=0;i for(j=0;j printf(\printf(\} init_viit();tdf(&ga);init_viit();tbf(&ga);return0;

 }

 根据右图的结构验证实验,输入:

 ABCDEFGH#0,10,20,51,31,42,52,63,74,7- - 1,- -1 1

  2、阅读并运行下面程序,补充拓扑排序算法。#include#include#defineN20 运行结果:

 10B4E7HAC2F5G6

 3D31

 typedeftructedgenode{/某图的邻接表:邻接链表结点某/intadjve 某;/某顶点序号某/ tructedgenode 某ne 某t;/某下一个结点的指针某/}edgenode;

 typedeftructvnode{/某图的邻接表:邻接表某/chardata;/某顶点信息某/ intind;/某顶点入度某/ tructedgenode 某link;/某指向邻接链表指针某/}vnode; voidcreateGraph_lit(vnodeadjlit[],int 某p);/某建立有向图的 邻接表某/voidtopSort(vnodeg[],intn);/某拓扑排序某/

 voidcreateGraph_lit(vnodeadjlit[],int 某p){/某建立有向图的邻接表某/inti,j,n,e;charv; edgenode 某;i=0;n=0;e=0;

 printf(\输入顶点序列(以#结束):\\n\while((v=getchar())!="#")

 {

 adjlit[i].data=v;/某读入顶点信息某 /adjlit[i].link=NULL;adjlit[i].ind=0;i++;} n=i;某 p=n; /某建立邻接链表某/

 printf(\请输入弧的信息(i=-1 结束):i,j:\\n\canf(\ while(i!=-1){

 =(tructedgenode 某)malloc(izeof(edgenode));->adjve 某=j;

 ->ne 某 t=adjlit[i].link;adjlit[i].link=; adjlit[j].ind++;/某顶点j 的入度加 1 某/e++; canf(\} printf(\邻接表:\ for(i=0;i printf(\ 32

 =adjlit[i].link; while(!=NULL){ printf(\=->ne 某t;}}} voidtopSort(vnodeg[],intn){/某拓扑排序某/} intmain(){ vnodeadjlit[N];intn, 某 p;p=&n; createGraph_lit(adjlit,p);return0; }

 根据输入,输出有向图的拓扑排序序列。并画出有向图。输入 :ABCDEF#0,11,22,34,14,5- - 1,- -1 1

 运行结果:

 33

 3、阅读并运行下面程序。

 #include#defineN20#defineTRUE1

 #defineINF32766/某邻接矩阵中的无穷大元素某 /#defineINFIN32767/某比无穷大元素大的数某/

 typedeftruct{/某图的邻接矩阵某/intve 某num,arcnum;charve 某[N];intarc[N][N];} graph;

 voidcreateGraph_w(graph 某g,intflag);voidprim(graph 某g,intu);voiddijktra(graphg,intv);voidhowprim();voidhowdij(); /某建带权图的邻接矩阵,若flag 为 1 则为无向图,flag 为 0 为有向图某/voidcreateGraph_w(graph 某g,intflag){ inti,j,w;charv; g->ve 某num=0; g->arcnum=0;i=0;

 printf(\输入顶点序列(以#结束):

 \\n\while((v=getchar())!="#"){

 g->ve 某[i]=v;/某读入顶点信息某/i++;} g->ve 某num=i; for(i=0;i<6;i++)/某邻接矩阵初始化某/for(j=0;j<6;j++) g->arc[i][j]=INF;

 printf(\输入边的信息:\\n\

 canf(\读入边(i,j,w)某/while(i!=-1)/某读入i 为-1 时结束某/{ g->arc[i][j]=w; 34

 if(flag==1)

 g->arc[j][i]=w; canf(\}} voidprim(graph 某g,intu)/某出发顶点u 某/{ intlowcot[N],cloet[N],i,j,k,min; for(i=0;ive 某num;i++)/某求其他顶点到出发顶点u 的权某/{ lowcot[i]=g->arc[u][i];cloet[i]=u;} lowcot[u]=0;

 for(i=1;ive 某num;i++)/某循环求最小生成树中的各条边某 /{min=INFIN;

 for(j=0;jve 某num;j++)/某选择得到一条代价最小的边某 /if(lowcot[j]!=0&&lowcot[j] min=lowcot[j]; k=j;}

 printf(\/某输出该边某/

 lowcot[k]=0;/某顶点k 纳入最小生成树某/

 for(j=0;jve 某num;j++)/某求其他顶点到顶点k 的权某/if(g- >arc[k][j]!=0&&g->arc[k][j]

 lowcot[j]=g->arc[k][j];cloet[j]=k;}}} voidprintPath(graphg,inttartVe 某,intEndVe 某){ inttack[N],top=0;/ 某 堆 栈 某 /inti,k,j; intflag[N];/某输出路径顶点标志某/k=EndVe 某; for(i=0;i 35

 printf(\ flag[j]=1; tack[top++]=k; while(top>0)/某找j 到k 的路径某/{ for(i=0;i if(path[k][i]==1&&flag[i]==0)/某 j 到k 的路径含有i 顶点某/{ if(g.arc[j][i]!=INF)/某 j 到i 的路径含有...

相关推荐

热门文章

2022年争先创优演讲稿最新10篇(完整文档)

《争先创优演讲稿最新10篇》是一篇好的范文,觉得有用就收藏了,这里给大家转摘到。演讲稿具有宣传、鼓动、教育和欣赏等作用,它可以把演讲者的观点、主张与思想感情传达给听众以及读者,使他们信服并在思想感情上产生共鸣。下面小编给大家带来关于争先创优演讲稿,希望会对大家的与有所帮助。争先创优演讲稿1

共青团员自我总结400字

《2022共青团员自我总结400字》是一篇好的范文,好的范文应该跟大家分享,希望对网友有用。作为一个新时期的共青团员,思想****理论是不可或缺的,共青团员是中国共产党的后备力量,也是党的生命力的源泉,理论上的成熟是****上成熟的基础,****上的清醒来源于理论上的坚定。以下是小编整理的2022共

2022年爱细节作文600字初中范本

《2022爱的细节作文600字初中范文【】》是一篇好的范文,觉得应该跟大家分享,希望对网友有用。爱是冬日的一缕阳光,使饥寒交迫的人感到人间的温暖;爱是一场洒落在久旱的土地上的甘霖,使濒临绝境的人重新看到生活的希望;爱是一首飘落在夜空里的歌谣,使孤苦无依的人获得心灵的慰藉。下面小编为大家整理了20

2022年学生会竞选自我介绍演讲稿最新10篇

《学生会竞选自我介绍演讲稿最新10篇》是一篇好的范文,感觉写的不错,希望对您有帮助,重新编辑了一下发到。演讲稿不仅要充分体现演讲者独到、深刻的观点和见解,而且还要对声调的高低、语速的快慢、体态语的运用进行设计并加以注释,以达到最佳的传播效果。下面小编给大家带来关于自我介绍演讲稿,希望会对大

愚人节祝福语简短一句话大全(完整文档)

本页是最新发布的《2022愚人节祝福语简短一句话大全》的详细范文参考文章,好的范文应该跟大家分享,希望大家能有所收获。节的历史起源于法国,最初是法国的一些主张变革的人为嘲笑那些因循守旧的人而在4月1日使出一些骗人的招数。后逐渐成为西方及美国的民间传统节日,现在也成为东方很多国家人们喜爱的节

共青团员个人总结参考五篇(范文推荐)

《共青团员个人总结参考五篇》是一篇好的范文,觉得应该跟大家分享,希望大家能有所收获。一年来,在团组织和各位老师的热心支持和帮助下,认真做好本职,积极完成学校布置的各项任务。以下是小编整理的共青团员个人总结参考范文五篇,欢迎阅读分享。共青团员个人总结参考1一个学年以来,在团组织的正确领导和帮助下,我在

2022年新员工培训心得怎么写合集通用(全文)

最近发表了一篇名为《新员工培训心得怎么写通用》的范文,感觉很有用处,重新整理了一下发到这里。培训能够拓展员工的视野,提升员工的能力,让员工在培训之中成长。员工培训心得对经历过员工培训的人具有许多的影响,你知道它的写法?你是否在找正准备撰写“新

关于珍爱生命作文800字高中【精选推荐】

范文参**网最近发表了一篇名为《2022关于珍爱生命的作文800字高中【】》的范文,感觉写的不错,希望对您有帮助,重新整理了一下发到这里。在平日的学习、工作和生活里,大家都不可避免地要接触到作文吧。下面小编为大家整理了2022关于的作文800字高中【5

2022清明网上祭英烈活动心得感悟经典范本10篇600字

本页是最新发布的《清明网上祭英烈活动心得感悟经典范文10篇600字》的详细范文参考文章,觉得有用就收藏了,希望大家能有所收获。清明祭心得感悟经典范文10篇600字说到清明节这个大家熟悉的节日,大家一定都是去祭拜祖先!但是可曾想过在清明节这天来祭奠我们的英烈们呢?下面是小编为您推荐

2022年度《公民节约用水行为规范》倡议书范本

最近发表了一篇名为《2022《公民节约用水行为规范》倡议书范文【五篇】》的范文,感觉很有用处,看完如果觉得有帮助请记得(CTRL+D)收藏本页。虽然人类已浪费了许多,但是人类们已经感觉到水的可贵而开始保护起来。在此大家一起杜绝浪费水之源,保护水资源吧。下面小编在这里为大家精心整理了几篇20

2022年教师年度考核个人总结例文

最近发表了一篇名为《教师年度考核个人总结例文》的范文,觉得有用就收藏了,重新编辑了一下发到。在日常生活或是工作中,我们经常会写总结,面对年末的时候,你们知道教师是怎么写的工作总结?来了解下吧!以下是小编为大家带来的2022教师年度考核个人总结例文,希望您能喜欢!教师年度考核个人总

2022全国中小学生安全教育日心得体会三篇

最近发表了一篇名为《2022全国中小学生安全教育日心得体会三篇》的范文,感觉写的不错,希望对您有帮助,重新编辑了一下发到。2022全国中小学生日心得体会三篇为贯彻落实珍爱,安全第一为主题的中小学安全日教育活动,我校领导高度重视,紧紧围绕安全日安全教育这一主线,在师生中开展了丰富多