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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构 图的遍历演示.docx

1、数据结构 图的遍历演示中南民族大学学生实验报告院 系: 数学与统计学学院 专 业: 统计学 年 级: 2008级 课程名称: 数据结构 学 号: 姓 名: 指导教师: 2010年 12 月 8日年级2008级班号学号专业统计学姓名实验名称图的遍历演示实验类型设计型综合型创新型 实 验 目 的或要求要求: l1 图采用领接表的存储结构 l2 深度优先搜索图 l3 广度优先搜索图 实验原理(算法流程)#include #include #define MAX_VERTEX_NUM 20#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#defi

2、ne TRUE 1#define OK 1#define FALSE 0#define ERROR 0#define OVERFLOW -2typedef enumDG,DN,UDG,UDNGraphKind;/有向图,有向网,无向图,无向网bool visitedMAX_VERTEX_NUM;typedef struct ArcNode int adjvex;/该弧所指向的顶点在数组中的下标 struct ArcNode *nextarc; int *info;/该弧相关信息的指针ArcNode;typedef struct VNode int data;/顶点信息 ArcNode *fir

3、starc;/指向第一条依附该顶点的弧的指针VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices; int vexnum,arcnum;/图的当前顶点数和弧数 int kind;/图的种类标志ALGraph;typedef struct int *base; int *top; int stacksize;SqStack;typedef struct QNode int data; struct QNode *next;QNode,*QueuePtr;typedef struct QueuePtr front; QueuePtr

4、 rear;LinkQueue;int LocateVex(ALGraph G,int v)/返回数组下标值 int i; for(i=0;iMAX_VERTEX_NUM;+i) if(G.verticesi.data=v) return i; return -1;void CreateDN(ALGraph &G)/采用邻接表存储表示,构造有向图G(G.kind=DN) int i,j,k;ArcNode *p;int v1,v2; G.kind=DN; printf( 输入顶点数:); scanf(%d,&G.vexnum); printf( 输入弧数:); scanf(%d,&G.arcn

5、um); printf( 输入顶点:n); for(i=0;iG.vexnum;+i) /构造表头向量 scanf(%d,&G.verticesi.data); G.verticesi.firstarc=NULL;/初始化指针 for(k=0;kadjvex=j;p-nextarc=G.verticesi.firstarc; G.verticesi.firstarc=p; scanf(%d,&p-info); /forint Push(SqStack &S,int e) /插入元素e为新的栈顶元素 if(S.top-S.base=S.stacksize) /栈满,追加存储空间 S.base=(

6、int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int); if(!S.base)exit(OVERFLOW); /存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e; return OK;int InitStack(SqStack &S) /栈的初始化 S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int); if(!S.base)exit(OVERFLOW); /存储分配失败 S.top=S.ba

7、se; S.stacksize=STACK_INIT_SIZE; return OK;int Pop(SqStack &S,int &e) /删除栈顶元素/若栈不空,则删除S的栈顶元素,用e返回其值 if(S.top=S.base) return ERROR; e=*-S.top; return OK;int GetTop(SqStack S,int &e) /取栈顶元素/若栈不空,则用e返回S的栈顶元素 if(S.top=S.base) return ERROR; e=*(S.top-1); return OK;int StackEmpty(SqStack S) /栈空 if(S.top=S

8、.base) return TRUE; else return FALSE;int InitQueue(LinkQueue &Q) /队列初始化 Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode); if(!Q.front)exit(OVERFLOW); Q.front-next=NULL; return OK;int EnQueue(LinkQueue &Q,int e) /插入/插入元素e为Q的新的队尾元素 QueuePtr p=(QueuePtr)malloc(sizeof(QNode); if(!p)exit(OVERFLOW); p-data=

9、e;p-next=NULL; Q.rear-next=p; Q.rear=p; return OK;int DeQueue(LinkQueue &Q,int &e) 若队列不空,则删除Q的队头元素,用e返回其值 if(Q.front=Q.rear) return ERROR; QueuePtr p=Q.front-next; e=p-data; Q.front-next=p-next; if(Q.rear=p)Q.rear=Q.front; free(p); return OK;int QueueEmpty(LinkQueue Q) /队列空 if(Q.front=Q.rear) return

10、 TRUE; else return FALSE;int FirstAdjVex(ALGraph G,int u) if(!G.verticesu.firstarc) return -1; return LocateVex(G,G.verticesu.firstarc-adjvex);int NextAdjVex(ALGraph G,int u,int w) ArcNode *p=G.verticesu.firstarc; while(p&LocateVex(G,p-adjvex)!=w) p=p-nextarc; if(!p) return FirstAdjVex(G,u); p=p-nex

11、tarc; if(!p) return -1; return LocateVex(G,p-adjvex);void Visit(ALGraph G,int v) printf(%2d,G.verticesv.data);void DFSTraverse(ALGraph G)/按深度优先非递归遍历图G,使用辅助栈S和访问标志数组visited int v,w;SqStack S; for(v=0;vG.vexnum;v+) visitedv=FALSE; InitStack(S); for(v=0;v=0;w=NextAdjVex(G,v,w) if(!visitedw) Visit(G,w);

12、 visitedw=TRUE; Push(S,w); GetTop(S,v); /if /for Pop(S,v); GetTop(S,v); /while /if printf(n); void BFSTraverse(ALGraph G)/按广度优先非递归遍历图G,使用辅助队列Q和访问标志数组visited int v,u,w;LinkQueue Q; for(v=0;vG.vexnum;+v) visitedv=FALSE; InitQueue(Q); for(v=0;v=0;w=NextAdjVex(G,u,w) if(!visitedw) /w为u的尚未访问的邻接顶点 visited

13、w=TRUE;Visit(G,w); EnQueue(Q,w); /if /while /if printf(n);void PrintDN(ALGraph G) /图的显示 int i;ArcNode *p; printf(顶点:n); for(i=0;iG.vexnum;+i) printf(%2d,G.verticesi.data); printf(n弧:n); for(i=0;iadjvex,p-info); p=p-nextarc; printf(n); /if /forvoid main() ALGraph G; printf(*题目:图的遍历*nn); CreateDN(G); PrintDN(G); printf( 深度优先遍历:); DFSTraverse(G); printf(n 广度优先遍历:); BFSTraverse(G);组内分工(可 选) 0 8 2 2 1 6 7 3 1 6 4 5 4 3 9 5 7 (所要遍历的图) 主程序实 验结果分析及心 得 体 会 实验结果成绩评定 教师签名: 2010年 月 日

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

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