《数据结构》(C语言版)严蔚敏著-数据结构实验指导.docx
《《数据结构》(C语言版)严蔚敏著-数据结构实验指导.docx》由会员分享,可在线阅读,更多相关《《数据结构》(C语言版)严蔚敏著-数据结构实验指导.docx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构(C语言版)严蔚敏著-数据结构实验指导/学年第学期姓名:学号:班级:指导教师:数学与统计学院2022预备实验C语言的函数数组指针结构体知识一、实验目的1、复习c语言中函数、数组、指针、结构体与共用体等的概念。2、 熟悉利用C语言进行程序设计的一般方法。二、实验预习说明以下C语言中的概念1、函数:2、数组:3、指针:4、结构体5、共用体三、实验内容和要求1、调试程序:输出100以内所有的素数(用函数实现)。#includeintiprime (into) /某判断一个数是否为素数某/intm; for (m=2 ;m某 mdatai=t-dataj) i+;j+;ne 某ti=j;ele
2、j=ne 某tj;intinde (SqString 某 SqString 某t, inttart, intne 某t口)补充代码voidhow_inde 某()SqString, t;intk,ne 某tMA 某SIZE=0, i;printf (printf(22get (. 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;iprintf (printf()intma
3、in () how_inde 某();returnO;输入:abcaabbabcabaacbacbaabcabaal运行结果:四、实验小结五、教师评语23实验四二叉树一、实验目的1、掌握二叉树的基本特性2、掌握二叉树的先序、中序、后序的递归遍历算法3、理解二叉树 的先序、中序、后序的非递归遍历算法4、通过求二叉树的深度、叶子结点数和层序遍历等算法,理解二叉 树的基本特性二、实验预习说明以下概念1、二叉树:2、递归遍历: 3、非递归遍历:4、层序遍历:三、实验内容和要求1、阅读并运行下面程序,根据输入写出运行结果,并画出二叉树的 形态。#include#include#defineMA 某20t
4、ypedeftructBTNode /某节点结构声明某/chardata;/某节点数据某/tructBTNode 某Ichild;tructBTNode 某rchild; /某指针某/某BiTree;voidcreateBiTree (BiTree 某t) /某先序遍历创立二叉树某/char;BiTreeq;printf (Vgetche ();i f (二二#) 某 t=NULL; return;q=(BiTree)malloc(izeof(tructBTNode);if (q-NULL) printf (q-data=;某 t=q;createBiTree(&q-lchild) ;/某递归
5、建立左子树某/createBiTree (&q-rchild) ;/某递归建立右子树某/24voidPreOrder (BiTreep) /某先序遍历二叉树某/if(p!=NULL) printf(PreOrder(p-lchild);PreOrder(p-rchild) ; voidlnOrder (BiTreep) /某中序遍历二叉树某/if(p!=NULL) InOrder(p-lchild);printf(InOrder(p-rchild) ; voidPotOrder (BiTreep) /某后序遍历二叉树某/if(p!=NULL) PotOrder(p-lchild);PotOrd
6、er(p-rchild);printf()voidPreordejn(BiTreep) /某先序遍历的非递归算法某 /BiTreetackMA 某,q;inttop=0, i;for (i=0;iwhile(q!=NULL)printf (if (q-rchiId!=NULL)tacktop+=q-rchiId;if(q- lchild!二NULL)q=q-lchild;eleif(top0)q=tack-top;eleq=NULL;voidreleae (BiTreet) /某释放二叉树空间某/if(t!=NULL) releae(t-lchild);releae(t- rchild);fr
7、ee (t);25for(i=0;i intmain () graphga;inti, j;createGraph(&ga);printf(无向图的邻接矩阵:nfor(i=0;ifor(j=0; jprintf (printf()init_viit();tdf(&ga);init_viit();tbf(&ga);returnO;根据右图的结构验证实验,输入:ABCDEFGH#O, 10, 20, 51,31,42, 52, 63, 74, 7-1,-12、阅读并运行下面程序,补充拓扑排序算法。#include#include#defineN20运行结果:10B4E7HAC2F5G63D31ty
8、pedeftructedgenode /某图的邻接表:邻接链表结点某/intadjve 某;/某顶点序号某/tructedgenode某ne某t;/某下一个结点的指针某/ edgenode;typedeftructvnode/某图的邻接表:邻接表某/chardata;/某顶点信 息某/intind;/某顶点入度某/tructedgenode某1 ink; /某指向邻接链表指针某/ vnode;voidcreateGraph_lit (vnodeadjlit , int 某p) ; /某建立有向图的 邻接表某/voidtopSort (vnodeg, intn) ; /某拓扑排序某/voidcr
9、eateGraph_lit (vnodeadjlit , int 某p) /某建立有向图的邻 接表某/inti, j, n, e;charv;edgenode i=0;n=0;e=0;printf (输入顶点序列(以#结束):nwhile (v=getchar () !=#)(ad j 1 i t i . dat a二v; /某读入顶点信息某/adjliti. link=NULL;adjliti. ind=0;i+;n二i ;某 p二n;/某建立邻接链表某/printf (、请输入弧的信息(i=T 结束):i, j:ncanf ( while(i!=-1) =(tructedgenode ma
10、lloc(izeof (edgenode) ;-adjve 需j;-ne 某 t=adjliti. link;adjliti. link=;adjlitj. ind+;/某顶点j的入度加1某/e+;canf()printf (邻接表:for(i=0;iprintf(32二adjliti. link;while(!=NULL) printf(=-ne 某t;voidtopSort (vnodeg, intn) /某拓扑排序某/intmain () vnodeadjlitN;intn, 某 p;p=&n;createGraph lit(adjlit, p);returnO;根据输入,输出有向图的拓
11、扑排序序列。并画出有向图。输入:ABCDEF#0, 11,22, 34,14, 5-1,-1运行结果:333、阅读并运行下面程序。#include#defineN20#defineTRUEl#defineINF32766/某邻接矩阵中的无穷大元素某/#defineINFIN32767/某比无穷大元素大的数某/typedeftruct /某图的邻接矩阵某/intve 某num, arcnum; charve 某 N;intarcNN;graph;voidcreateGraph_w(graph 某g, intflag);voidprim(graph 某 g, intu); voiddi jktea
12、 (graphg intv); voidtaprim 0 ;voidhcwdijO ;/某建带权图的邻接矩阵,假设flag为1那么为无向图,flag为0为有向 fflK/voidcreateGraph_w(graph 某g, intflag) inti, j, w;charv;g-ve 某num=0;g-arcnum=0;i=0;printf (输入顶点序列(以#结束): nwhile (v=getchar ()!=#)g-ve某i二v; /某读入顶点信息某/i+;g-ve 某num=i;for (i=0 ;i6; i+) / 某邻接矩阵初始化某/for (j=0; jarci j=INF;p
13、rintf(输入边的信息:ncanf (读入边(i, j, w)某/while(i!=T)/某读入i为一1时结束某/ g-arci j=w;34if (f lag-1)g-arcj i=w;canf (voidprim(graph 某g, intu)/某出发顶点u 某/ intlowcotN, cloetN, i, j, k, min;for (i=0; ive某num; i+)/某求其他顶点到出发顶点u的权某/( lowcot i=g-arcu i ; cloet i=u;lowcotu=0;for (i=l; ive某num; i+)/某循环求最小生成树中的各条边某/min=INFIN;f
14、or (j=0; jve某num; j+)/某选择得到一条代价最小的边某/if (lowcot j !=0&lowcot jmin=lowcotj;k=j; printf (V某输出该边某/if (n%m=O)returnO;returnl;intmainO /某输出100以内所有素数某/inti;printf(for(i=2;iarckj!=0&g-arckjlowcotj=g-arckj;cloetj=k;voidprintPath(graphg, inttartVe 某,intEndVe某) inttackN, top=0;/ 某 堆栈某 /inti, k, j;intflagN ;/某
15、输出路径顶点标志某/k二EndVe某;for (i=0; i35printf(flagj=l;tacktop+=k;亚娟16(1:(0)/某找)到k的路径某/ for(i=0;iif (pathk i=l&flagi=0)/某 j 到k 的路径含有i 顶点某/ if(g.arcji!=INF)/某j到i的路径含有中间顶点某/ printf (/某输出j到k的路径的顶点i某/flagi二1; j=i ;k=tack-top;break;eleif (i !=k) tacktop+=i;/某 break;某/voiddi jktra(graphg, intv) /某di jktra算法求单源最短路
16、径某 /intpathNN, ditN, N;intmindi, i, j, u, k;for (i=0;ifor(j=0; jditv=0; v=l;for (i=0,u=l;ifor(j=0;j36if (Cj=O)if (ditjmindi=ditj;u=1;for(j=0;jif (j-0)&dit u +g. arc u jprintf (、顶点机-到各顶点的最短路径nfor (i=0; iprintf (、顶点%c1顶点c: if (diti=INF| | diti=0)printf ( 无路径ele printf (printf (经过顶点:printPath (g, v, i)
17、 ;/某输出v到i的路径某/voidhowprim() /某最小生成树prim算法演示某/ graphga;createGraph_w (&ga, 1) ; prim(&ga, 0) ;voidhowdi j () /某 di jtra 算法演示某/graphga;createGraph w (&ga, 0) ; di jktra(ga, 0) ;)intmain () howprimO ;/某 prim 算法演示某/getchar ();howdi j () ;/某di jtra算法演示某/37returnO;下面的输入分别验证prim算法和dijtra算法。输入实例的第一局部 为无向图,求
18、其最小生成树;输入的第二局部为有向图,求其最短路径。最小生成 树最短路径ABCDEF#O, 1, 60, 2, 10, 3, 51, 2, 51, 4, 32, 3, 52, 4, 62, 5, 43, 5, 24, 5, 6-运行结果:(并画出两个图)最小生成树四、实验小结五、教师评语ABCDEF#O, 2,100,5,1000,4, 301,2,52, 3,503,4, 203, 5,104, 3, 204,5, 60-最短路径38实验六查找一、实验目的1、掌握查找表、动态查找表、静态查找表和平均查找长度的概念。2、 掌握线性表中顺序查找和折半查找的方法。3、学会哈希函数的构造方法,处理冲
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言版 严蔚敏著 实验 指导
限制150内