ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:124.89KB ,
资源ID:6070113      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6070113.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告模板图的遍历.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告模板图的遍历.docx

1、数据结构课程设计报告模板图的遍历数据结构课程设计报告书设 计 题 目 图遍历的演示 姓 名 专 业 班 级 学 号 指 导 教 师 成 绩 评 语 2014年6月20日目 录目 录 1一、功能需求 1(一)原始数据 1(二)系统功能 1三、程序总体设计 2(一)数据结构 2(二) 函数原形清单 2(三)程序总体框架 4(四)详细代码 4四、程序清单 15五、总结 17一、功能需求 以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的顶点为起点,分别输出每种遍历下的顶点访问序列和相应生成树的边集。二、系统功能和原始数据(一)原始数据 设图的顶点不超过20个,每个顶点用一个

2、编号表示(如果一个图有n个顶点,则它们的编号分别为1,2,n)。通过输入图的全部边输入一个图,每条边为一对整数,可以对边的输入顺序作某种限制。注意,生成树的边是有向边,端点顺序不能颠倒。(二)系统功能 1.创建无向图 2.打印无向图 3.深度优先搜索 4.广度优先搜索三、程序总体设计(一)数据结构typedef struct EBox int mark;/访问标记,1代表已访问,0代表未访问 int ivex,jvex;/该边依附的两个顶点的位置 struct EBox *ilink,*jlink;/分别指向依附这两个顶点的下一条边 /InfoType *info;/该边信息指针EBox;ty

3、pedef struct VexBox VertexType data; EBox *firstedge;/指向第一条依附该顶点的边VexBox;typedef struct VexBox adjmulistNUM; int vexnum,edgenum;/无向图的当前顶点数和边数AMLGraph;/-队列的定义typedef int QElemType;typedef struct QNode QElemType data; struct QNode *next;QNode,*QueuePtr;typedef struct QueuePtr front,rear;LinkQueue; (二)

4、 函数原形清单 int LocateVex(AMLGraph G,VertexType u) /寻找输入的数据在图中的位置,若不存在则返回-1 int CreateGraph(AMLGraph &G) /采用邻接多重表存储表示,构造无向图G VertexType* GetVex(AMLGraph G,int v) /返回V的值 int FirstAdjVex(AMLGraph G,VertexType v)/返回V的第一个邻接点的序号,若没有则返回-1 int NextAdjVex(AMLGraph G,VertexType v,VertexType w)/返回V的(相对于W)的下一个邻接结点

5、的序号,若W是V的最后一个邻接结点, 则返回-1 void DFS(AMLGraph G,int v)/深度优先搜索/深度优先遍历图 void DFSTraverse(AMLGraph G,int(*Visit)(VertexType) int InitQueue(LinkQueue *Q) /队列的初始化 int QueueEmpty(LinkQueue Q)/判断队列是否为空,为空则返回1,否则返回0 int EnQueue(LinkQueue *Q,QElemType e) /向队列中插入元素 int DeQueue(LinkQueue *Q,QElemType *e) /若队列不为空,

6、则删除对头元素,并返回1;否则返回 0 void BFSTraverse(AMLGraph G,int(*Visit)(VertexType) /广度优先非递归遍历图G void MarkUnVisited(AMLGraph G) /把边的访问标记设置为0,即未被访问 void Display(AMLGraph G) /显示构造的无向图(包括定点数、顶点、边数、边)(三)程序总体框架(四)详细代码#include using namespace std;/-无向图的邻接多重表存储结构的定义const int NUM=20;const int Data_Num=2;/每个顶点所表示的数据type

7、def char VertexTypeData_Num; typedef struct EBox int mark;/访问标记,1代表已访问,0代表未访问 int ivex,jvex;/该边依附的两个顶点的位置 struct EBox *ilink,*jlink;/分别指向依附这两个顶点的下一条边EBox;typedef struct VexBox VertexType data; EBox *firstedge;/指向第一条依附该顶点的边VexBox;typedef struct VexBox adjmulistNUM; int vexnum,edgenum;/无向图的当前顶点数和边数AML

8、Graph;/-队列的定义typedef int QElemType;typedef struct QNode QElemType data; struct QNode *next;QNode,*QueuePtr;typedef struct QueuePtr front,rear;LinkQueue;/寻找输入的数据在图中的位置,若不存在则返回-1int LocateVex(AMLGraph G,VertexType u) int i; for(i=0;iG.vexnum;i+) if(strcmp(u,G.adjmulisti.data)=0) return i; return -1;/采

9、用邻接多重表存储表示,构造无向图Gint CreateGraph(AMLGraph &G) coutG.vexnum;/输入图当前的顶点数 cinG.edgenum;/输入图当前的边数 cout请输入每个顶点所对应的值:endl; for(int i=0;iG.adjmulisti.data;/输入顶点值 G.adjmulisti.firstedge=NULL;/初始化指针 VertexType v1,v2; EBox *p; int j;/每条弧所关联的两个结点 for(int k=0;kG.edgenum;k+) cout请输入第kv1;cinv2; i=LocateVex(G,v1);j

10、=LocateVex(G,v2);/确定v1和v2在图G中的位置 p=(EBox *)malloc(sizeof(EBox); /对弧结点进行赋值 (*p).mark=0; (*p).ivex=i; (*p).jvex=j; (*p).ilink=G.adjmulisti.firstedge; (*p).jlink=G.adjmulistj.firstedge; G.adjmulisti.firstedge=G.adjmulistj.firstedge=p; return 1;/返回V的值VertexType* GetVex(AMLGraph G,int v) if(vG.vexnum|v0)

11、 exit(0); return &G.adjmulistv.data;/返回V的第一个邻接点的序号,若没有则返回-1int FirstAdjVex(AMLGraph G,VertexType v) int i; i=LocateVex(G,v); if(iivex=i) return G.adjmulisti.firstedge-jvex; else return G.adjmulisti.firstedge-ivex; else return -1;/返回V的(相对于W)的下一个邻接结点的序号,若W是V的最后一个邻接结点,则返回-1int NextAdjVex(AMLGraph G,Ver

12、texType v,VertexType w) int i,j; EBox *p; i=LocateVex(G,v); j=LocateVex(G,w); if(i0|jivex=i&p-jvex!=j) p=p-ilink; else if(p-jvex=i&p-ivex!=j) p=p-jlink; else break; if(p&p-ivex=i&p-jvex=j) p=p-ilink; if(p&p-ivex=i) return p-jvex; else if(p&p-jvex=i) return p-jvex; if(p&p-ivex=j&p-jvex=i) p=p-jlink;

13、if(p&p-ivex=i) return p-jvex; else if(p&p-jvex=i) return p-jvex; return -1; /-队列的操作int visiteNUM;/访问标志数组int (*VisitFunc)(VertexType v);void DFS(AMLGraph G,int v) int j; EBox *p; VisitFunc(G.adjmulistv.data); visitev=1;/该顶点已经被访问 p=G.adjmulistv.firstedge; while(p) j=p-ivex=v?p-jvex:p-ivex; if(!visitej

14、) DFS(G,j); p=p-ivex=v?p-ilink:p-jlink; /深度优先遍历图void DFSTraverse(AMLGraph G,int(*Visit)(VertexType) int v,start; VisitFunc=Visit; for(v=0;vG.vexnum;v+) visitev=0; coutstart; cout按广深度优先搜索的结果是:endl; for(v=start;v=G.vexnum) for(v=0;vG.vexnum;v+) if(!visitev) DFS(G,v); /内层for /if else if(!visitev) DFS(G

15、,v); /else /外层for coutbbb ; coutnext=NULL; return 1;/判断队列是否为空,为空则返回1,否则返回0int QueueEmpty(LinkQueue Q) if(Q.front=Q.rear) return 1; else return 0;/向队列中插入元素int EnQueue(LinkQueue *Q,QElemType e) QueuePtr p=(QueuePtr)malloc(sizeof(QNode); if(!p) exit(0); p-data=e; p-next=NULL; (*Q).rear-next=p; (*Q).rea

16、r=p; return 1;/若队列不为空,则删除对头元素,并返回1;否则返回 0int DeQueue(LinkQueue *Q,QElemType *e) QueuePtr p; if(*Q).front=(*Q).rear) return 0; p=(*Q).front-next; *e=p-data; (*Q).front-next=p-next; if(*Q).rear=p) (*Q).rear=(*Q).front; free(p); return 1;/广度优先非递归遍历图Gvoid BFSTraverse(AMLGraph G,int(*Visit)(VertexType) i

17、nt u,v,w,start=0; VertexType w1,u1; LinkQueue Q; for(v=0;vG.vexnum;v+) visitev=0; InitQueue(&Q); coutstart; cout按广度优先搜索的结果是:endl; for(v=start;v=0;w=NextAdjVex(G,u1,strcpy(w1,*GetVex(G,w) if(!visitew) visitew=1; Visit(G.adjmulistw.data); EnQueue(&Q,w); /for InitQueue(&Q); for(v=0;v=0;w=NextAdjVex(G,u

18、1,strcpy(w1,*GetVex(G,w) if(!visitew) visitew=1; Visit(G.adjmulistw.data); EnQueue(&Q,w); /for coutbbb ; coutendl;/把边的访问标记设置为0,即未被访问void MarkUnVisited(AMLGraph G) int i; EBox *p; for(i=0;imark=0; if(p-ivex=i) p=p-ilink; else p=p-jlink; /显示构造的无向图(包括定点数、顶点、边数、边)void Display(AMLGraph G) int i; EBox *p;

19、 MarkUnVisited(G); coutG.vexnum个顶点:; for(i=0;iG.vexnum;i+) coutG.adjmulisti.data ; cout; G.edgenum条边:endl; for(i=0;iivex=i) if(!p-mark) coutG.adjmulisti.datajvex.datamark=1;/已经被访问过了 p=p-ilink; else if(!p-mark) coutivex.dataG.adjmulisti.datamark=1;/已经被访问过了 p=p-jlink; coutendl; int Visit(VertexType v)

20、 coutv; return 1;int main() int flag=1,control,YES=0; AMLGraph g; while(flag) couttt-endl; couttt-请输入你要进行的操作:-endl; couttt-1.创建无向图 |2.打印无向图 |-endl; couttt-3.深度优先搜索|4.广度优先搜索|-endl; couttt-0.退出系统-endl; couttt-control; switch(control) case 1: YES=CreateGraph(g); break; case 2: if(YES) Display(g); else

21、cout请先创建无向图,再选择此项endl; break; case 3: if(YES) DFSTraverse(g,Visit); else cout请先创建无向图,再选择此项endl; break; case 4: if(YES) BFSTraverse(g,Visit); else cout请先创建无向图,再选择此项endl; break; case 0: flag=0; break; /switch /while return 0; 四、程序清单 代码运行结果截图: 主页面:1.创建无向图:输入6个顶点、9条边,如图:2.打印无向图:3.深度优先搜索4.广度搜索五、总结参考资料1 殷人昆 .数据结构(用面向对象方法与c+语言描述) 清华大学出版社2 严蔚敏、吴伟民.数据结构(C语言版)清华大学出版社

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

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