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

《数据结构》(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 的路径含有...

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

热门文章

追梦筑梦圆梦演讲稿

最近发表了一篇名为《追梦筑梦圆梦演讲稿》的范文,感觉很有用处,这里给大家转摘到。演讲稿特别注重结构清楚,层次简明。在日新月异的现代社会中,在很多情况下需要用到演讲稿,如何写一份恰当的演讲稿呢?下面是小编为大家整理的追梦筑梦圆梦演讲稿,希望能够帮助到大家!追梦筑梦圆梦演讲稿1尊敬的

2022年度中考优秀作文素材别样美三篇

最近发表了一篇名为《中考优秀作文素材别样的美精选三篇》的范文,好的范文应该跟大家分享,看完如果觉得有帮助请记得(CTRL+D)收藏本页。雨过天晴,花坛边上,几只蜗牛缓缓的爬行着,留下一道彩虹般的痕迹,那柔软的外面,是坚硬的外壳,那也是一道的美丽。下面是小编为大家收集整理的关于素材别样的美精

《********大宣讲特别节目》直播观后感

最近发表了一篇名为《2022《********大宣讲特别节目》直播观后感【精选】》的范文,感觉写的不错,希望对您有帮助,希望对网友有用。,安全,在学校里,在校外,安全这个词恐怕是再熟悉不过了吧,让将安全铭记心中,时进刻刻都做到安全,让父母不再操心,让长辈不再担心,让安全从我做起,从身边

建团百周年活动策划

《2022建团百周年活动策划【精选】》是一篇好的范文,感觉很有用处,希望大家能有所收获。党的领导是共青团顺利发展的关键所在,无论是中国早期青年团的建立,还是中国共青团的正式成立,都离不开党的领导。下面小编为大家整理了2022建团百周年策划【精选】的相关内容,以供参考,希望给大家带来帮助!20

大一暑假社会实践报告(精选文档)

本页是最新发布的《2022大一暑假社会实践报告》的详细范文参考文章,感觉写的不错,希望对您有帮助,希望大家能有所收获。这个暑假过得是否充实呢,有些小伙伴在假期中参加了实践,那么如何做一份报告呢?下面是小编整理的2022大一暑假社会实践报告,仅供参考,希望能够帮助到大家。2022大一暑假社会

2022员工培训学习心得体会范本合集(范文推荐)

最近发表了一篇名为《员工培训学习心得体会范文》的范文,感觉写的不错,希望对您有帮助,为了方便大家的阅读。培训能让员工不断的提高,并清楚的意识到自己的缺点。经过员工培训,你一定有许多的收获,不妨来写一篇员工培训心得。你是否在找正准备撰写“员工培训心得体会范文”,下面小编收集了相关的素材,

2022不期而遇作文600字初中记叙文

《不期而遇作文600字初中记叙文》是一篇好的范文,感觉很有用处,希望对网友有用。,美词,像是袭袭的寒风慢慢轻掠大地,刺刺的,一缕****的阳光下有一小缕的橘红色静静的生长。下面是小编为大家收集整理的关于不期而遇600字初中记叙文,一起来看看吧!不期而遇作文600字篇一苏轼有语人间有味是清欢,或许正是

2022年度幼儿园清明节主题活动总结范本

《2022幼儿园清明节主题活动总结范文【精选】》是一篇好的范文,感觉很有用处,为了方便大家的阅读。,又称踏青节、行清节、三月节、祭祖节等,节期在仲春与暮春之交。清明节源自上古时代的祖先信仰与春祭礼俗,以下是小编整理的2022园清明节主题总结,希望可以提供给大家进行参考和借鉴。2022幼儿园清明节

2022年大学生档案自我鉴定300字10篇

2022年普通大学生个人社会实践实习报告精选服务社会做好思想准备和业务准备,公司内部电脑系统都是统一英文系统,就要求自己以职场……[详细]2022年党员思想汇报例文两篇【完整版】所以在以后的学习和生活中,经历过苦难的中国,工作以及生活中,特别是通过学习党章党纪……[详细]企业员工服务意识培训心得体会

以小见大作文500字范本(范文推荐)

最近发表了一篇名为《以小见大作文500字范文【精选】》的范文,感觉写的不错,希望对您有帮助,重新编辑了一下发到。一件事情的发生,离不开时间、地点、人物、事情的起因、经过和结果这六方面,即常说的六要素,只有交待清楚这几方面,才能使读者对所叙述的事,有个清楚、全面的了解。这里小编

2022年度有关安全学习心得合集(2022年)

本页是最新发布的《有关安全学习心得》的详细范文参考文章,感觉很有用处,看完如果觉得有帮助请记得(CTRL+D)收藏本页。有了一些收获以后,可以记录在心得体会中,这么做能够提升的书面表达能力。相信许多人会觉得心得体会很难写吧,下面是小编为大家收集的有关学习心得,供大家参考借鉴,希望可以帮

小学品德教师期末工作总结范本合集

最近发表了一篇名为《小学品德教师期末工作总结范文》的范文,感觉很有用处,重新整理了一下发到这里[http: www fwwang cn]。时光飞逝,如梭之日,回顾这段时间的工作,一定有许多的艰难困苦,是时候在工作总结中好好总结过去的成绩了。下面小编在这里为大家精心整理了几篇小学教师期