《数据结构图实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构图实验报告.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据结构图实验报告数据结构教程上机试验报告试验 七 、图算法上机实现一、试验目得: 1. 了解熟知图得定义与图得基本术语,驾驭图得几种存储结构。2. 驾驭邻接矩阵与邻接表定义及特点,并通过实例解析驾驭邻接矩阵与邻接表得类型定义。3. 驾驭图得遍历得定义、困难性分析及应用,并驾驭图得遍历方法及其基本思想。二、试验内容: 1. 建立无向图得邻接矩阵 2. 图得深度优先搜寻 3. 图得广度优先搜寻 三、试验步骤及结果:1. 建立无向图得邻接矩阵:1) 源代码:#icud stio、h #inue tdlib、h #dfe AXSIZE 0 typedf strut 长得表点顶且型符字为点顶/;EIS
2、AMere rah度小于 MAXSIE segde 且形整为边/;EZISXAEZSXAMsge tni为邻近矩阵 MGrph;/Mrph 为采纳邻近矩阵存储得图类型 void CeaMGaph(MGaph *g,int e,in n)/建立无向图得邻近矩阵 gs,为顶点个数,e 为边数nt i,j,k;pinf("Input da f vrtes(0n1):);for(i=0;in;i+)息信点顶入读/ ;i=ixeev-g )+i;<i;0=i(of)+j;nj;=(rof g-edgsj=0; /初始化邻接矩阵边条 e 入输/)+k;e=;1=(rof ;):)j,i(f
3、o egde tupI(tnir ;),i,d,d(nacs —>egsij=1; ;=isd>g void main() n i,j,n,e;针指型类图储存阵矩接邻用采向指立建/ ;g hprGM =(MGraph)malloc(sizof(Mph);/生成采纳邻接举证存储图类型得存储空间 阵矩接邻入输/ ;):hparGM fo zis tupn(ftnp得大小;)n&,(fnacs pint(Inp nmber of ge:); /输入邻接矩阵得边数scan(,&);阵矩接邻得图储存成生 ;)n,e,g(parGMar printf(Otu Gra
4、h:n");/输出存储图得邻接矩阵or(i=0;i<n;i+)for(j=;jn;j+)pintf(4d",—dgj); print("n); 2) 运行结果:2. 图得深度优先搜寻: 1) 源代码: ince tdio、 include sdlb、hdefin MAXSZ 30 ypeef stut noe/邻接表结点 域点接邻/;xeja i 域针指得点结边接邻个一下向指/;txen edon crtsEdgd; /邻接表结点类型 typedef struct vnode/顶点表结点域点顶/;xetev tni边接邻个一第表接邻向指/ ;eg
5、dtrif* eed节点得指针域 VerteNod;/顶点表结点类型 void ratAdjlit(VeteNode g,int e,in n) /建立无向图得邻接表,n 为顶点数,e 为边数,g存储 n 个顶点表结点;p edoegd ;,j,i ni pritf("Input data of vetex(—););表点顶得点顶个有立建/)+i;n<i;i(ro gi、erex=i; 读入顶点 i 信息 i、stgeNULL; /初始化指向顶点 i 得邻接表表头指针for (k=1;=e;k+)/输入 e 条边 ;)":)j,(fo egde tupnI
6、(ftnip sa(d,d",&i,j); p=(dgeoe)malo(size(EdgeNoe)); j 为点接邻加添中表接邻得v 点顶在/ ;jvjdap得结点 —>neti、ieg; /插入就是在邻接表表头进行得 gi、firted=p; p(Edgeode*)malloc(szef(dgeNode);得 i 为点接邻加添中表接邻得 j点顶在/ ;i=xejda—结点 p—next=gj、firsedge; /插入就是在邻接表表头进行得 ;pegdetsri、jg nt vteMIZE; MAXZ为大于或等于无向图顶点个数得常量
7、 vd DFS(VrexNod g,nt );p* eoed即,息信点顶出输/ ;)xerv、i,d4"(fnrp访问顶点;=itisiv p=gi、iede; /依据顶点 i 得指针 firstge查找其邻接表得第一个邻接边结点 )LU=!p(lih 被未点结边个这得接邻果如/ )xevja-pdetis!(f访问过 优度深行进点结边个这对/ ;)evj—p,g(F先搜寻 点结边接邻个一下得 i 点顶找查/ ;txen—pp voi DFraerse(VertexNde ,nt n)/深度优先搜寻遍历以邻接表存储得图,其中为顶点数,n为顶点个数;i tni
8、fo(i=;i;i+)置志标问访/ ;0=ietisv顶得过问访未找查图得点顶个 n 对/)+;ni;=i(o点并由该顶点起先遍历过问访未 i 点顶即时于等idtisiv 当/ )idetisiv!(f 历遍始开 i 点顶得过问访未从/ ;)i,(FD void main()int e,n;g 组数型类点结表点顶义定/ ;EZISXAMg edoNxrV prntf("It nber f ode:n);/输入图中节点个数边得个数canf(d",); 边中图入输/;):ege fo ebmun tunI"(tnip得个数;)e,d(fac pinf(Me adjli
9、st:n");CretAjlist(g,e,n); /建立无向图得邻接表;)n:esrevarTSF"(tnirp无得储存表接邻以历遍先优度深/ ;),g(esrevaTFD向图prit("); 2) 运行结果: 3. 图得广度优先搜寻: 1) 源代码: nud "stdio、h #ncde stl、hdene MASE 30 tyed struc node1邻接表结点 in djex; /邻接点域sruct ode1 ne;/指向下一个邻接边结点得指针域 Edgee; /邻接表结点类型 typdef su vn/顶点表结点 it vertex;/顶点域
10、 得点结边接邻个一第表接邻向指/ ;egdtsrif* edNegd指针域 VrtexNde; /顶点表结点类型 vod CreatAdjlist(ertexNde g,int e,nt n) /建立无向图得邻接表,为顶点数,为边数,g存储 n个顶点表结点EgeNode ;int i,j,;prntf("Input ata of vex(0):);for(i=0;in;i)/建立有 n 个顶点得顶点表 息信点顶入读/ ;xetrev、i 表接邻得 i 点顶向指化始初/ ;LUN=egdesri、ig表头指针 for(=1;k<=e;+) /输入 e 条边 ;)":),
11、i(fo ed tupnI"(ftirp ;)j,i&,d,(fnacs p(geNode *)al(izeof(Edgeode)); ->dvex=j;/在定点 vi 得邻接表中添加邻接点为 j 得结点 -nxt=gi、irstee;/插入就是在邻接表表头进行得 i、frstedg=p; ;))deg(foezs(collam) edoNegdE(=p i 为点接邻加添中表接邻得 jv 点顶在/ ;i=xevjda得结点进头表表接邻在是就入插/ ;egetsrif、jg=txe-行得;p=egdesif、 ypedef sut od;atd tn ;ten edo t
12、crtN; /链队列结点得类型 ypedef struct Qod *fro,*re; /将头、尾指针纳入到一个结构体得链队列 LQeue; /链队列类型 vo it_Queu(Luue*q) /创建一个带头结点得空队列QNode p;(LQueu )mallc(szo(Lu)); /申请带头、尾指针得链队列p=(QNde )maloc(sizeof(Qde)); /申请链队列得头结点pnet=NU;/头结点得 nxt 指针置为空 ( 点结头向指针指头队/ ;=trf-)q*( 点结头向指针指尾队/ ;p=rae)q it Empty_Qee(Queue *q) /判队空 空为队/ )raer
13、—=tnorf—q(fi return ;s return 0; oi I_LQueu(LQueu q,it x) /入队 ;p* edoNQ链新请申/ ;)edoNQ(ezis(cla) edoNQ(=p队列结点 p-data;空为域 txen 其时点结尾队为作点结新/ ;LLN=txen—p -rar>nx=p; /将新结点*p 链到原队尾结点之后p点结尾队得新向指针指尾队使/ ;p=aer—q void Out_Lueue(Qeue q,in *x)/出队 ode p;)q(eueuQL_ypm(irintf(Queu s empt!
14、n);/对空,出队失败esle q—>fot-n; 指针 p 指向链队列第一个数据结点(即对头结点) frontnext=p-ne;/头结点得 next 指针指向链队列其次个数据结点(即删除第一个数据结点) 回返 x 由经据数点结头对得除删将/ ;atad-p=ree(p); i(q—ont>e=UL)/出队后队为空,则置为空队列 ;tnrf>—q=ra>- it viitedXSIZE; /MASIZE 为大于或等于无向图顶点个数得常量 vo BFS(Vertexod ,Qeue Q,int ) /广度优先搜寻遍历邻接表存储得图,g
15、为顶点表,Q为队指针,i为第 i 个顶点 int ,x;EgeNoe p; 即,息信 i 点顶出输 ;)xtrev、ig,d4%(ftir访问顶点 ist1; /置顶点为访问过标记n_LQue(,); /顶点 i 入队 Q时空非 Q 队当 ))(eueQL_tpmE!(elihw 顶为记暂(j 送并队出点顶头对/ ;)x,Q(uu_tuO点 j) p=g、tede;/依据顶点 j 得表头指针查找其邻接表得第一个邻接边结点 )LLUN=!(elihw 点结边个这得接邻果如/)xvjdapdsv!(i未被访问过 ;)xere、xeda—pg,"d4(ftnrp/输出这个邻接边
16、结点得顶点信息 visitedpdjve=; /置该邻接边结点为访问过标记结边接邻该将/ ;)ejdap,(euuQL_nI点送人队 Q结边接邻个一下得 j 找查中表接邻得 j 点顶在/;txen-p=p点 void mi()nt e,n;VtexNode gMAZE;/定义顶点表结点类型数组LQueu q; 结中图入输/ ;)"n:edon fo remn tupnI"(fnp点个数 ;)n&,%"(nac中图入输/;)n:d fo remun tupnI(fnirp边得个数sanf("d,e);;) :tlja eaM(tnirp 表接邻得图
17、向无立建/;)n,e,g(tsdAtaeC Iit_LQeue(&q);/队列 q 初始化;)n:esrevTSFB(fnir 图向无得储存表接邻以历遍先优度广/ ;)0,q,g(B pritf(n); 2) 运行结果: 三、试验总结:1。通过本次试验让我对图得遍历以及图得深度与广度优先搜寻有了更深刻得记忆与理解,将课本理论得学问得以实践。2. 此次试验在书中已经对它得各个运算有了分析与讲解,结合课本与试验让我理解了图得各个概念与重点学问点。本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第15页 共15页第 15 页 共 15 页第 15 页 共 15 页第 15 页 共 15 页第 15 页 共 15 页第 15 页 共 15 页第 15 页 共 15 页第 15 页 共 15 页第 15 页 共 15 页第 15 页 共 15 页第 15 页 共 15 页