欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:12024913       资源大小:94.26KB        全文页数:13页
    • 资源格式: DOCX        下载积分:2金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要2金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构 图的遍历演示.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年 月 日


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开