c语言的程序问题有6个错,数据结构中图的深度二叉树 遍历 c语言

《数据结构》实验报告
◎实验题目:无向图的存储和遍历
◎实验目的:1、掌握使用Visual C++6.0上机调试程序的基本方法;
2、掌握图的邻接表存储结构和深度优先遍历的非递归算法。
3、提高自己分析问题和解决问题的能力,在实践中理解教材上的理论。
◎实验内容:建立有10个顶点的无向图的邻接表存储结构,然后对其进行深度优先遍历,
该无向图可以是无向连通图或无向非连通图。
一、需求分析
1、输入的形式和输入值的范围:根据提示,首先输入图的所有边建立邻接表存储结构,然后输入遍历的起始顶点对图或非连通图的某一连通分量进行遍历。
2、输出的形式:输出对该图是连通图或非连通图的判断结果,若是非连通图则输出各连通分量的顶点,之后输出队连通图或非连通图的某一连通分量的遍历结果。
3、程序所能达到的功能:输入图的所有边后,建立图的邻接表存储结构,判断该图是连通图或非连通图,最后对图进行遍历。
4、测试数据:
输入10个顶点(空格分隔):A B C D E F G H I J
输入边的信息(格式为x y):AB AC AF CE BD DC HG GI IJ HJ EH
该图为连通图,请输入遍历的起始顶点:A
遍历结果为:A F C D B E H J I G
是否继续?(是,输入1;否,输入0):1
输入10个顶点(空格分隔):A B C D E F G H I J
输入边的信息(格式为xy):AB AC CE CA AF HG HJ IJ IG
该图为非连通图,各连通分量中的顶点为:
& A F C E B & & D & & G I J H &
输入第1个连通分量起始顶点:F
第1个连通分量的遍历结果为:F A C E B
输入第2个连通分量起始顶点:I
第2个连通分量的遍历结果为:I G H J
输入第3个连通分量起始顶点:D
第3个连通分量的遍历结果为:D
是否继续?(是,输入1;否,输入0):0
Press any key to continue
二 概要设计
1、邻接表是图的一种顺序存储与链式存储结构结合的存储方法。邻接表表示法类似于树的孩子链表表示法。就是对图G中的每个顶点Vi,将所有邻接于Vi的顶点Vj链成一个单链表,这个单链表就称为顶点Vi的邻接表,再将所有邻接表的表头放到数组中,就构成了图的邻接表,邻接表表示中的两种结点结构如下所示。
一种顶点表的结点结构,它由顶点域(vertex)和指向第一条邻接边的指针域(firstedge)构成,另一种是边表(即邻接表)结点,它由邻接点域(adjvex)和指向下一条邻接边的指针域(next)构成。
2、无向图的建立
输入顶点后,将顶点信息存入顶点表的顶点域。在输入边的信息后,如输入的一条边为XY,则生成新的边表结点,将其插入到顶点X的边表头部,同理,生成新的边表结点,将其插入到顶点Y的边表头部。最终完成图的建立。
3、图的深度优先遍历
设p为指向边表结点的指针,首先访问图的指定的起始顶点V,从V出发访问一个与V邻接的p所指的顶点,并将其压入栈中,再从p所指定点出发,访问与p所指顶点邻接且未被访问的顶点,以后从该顶点出发。重复上述过程,知道找不到存在未访问过的邻接顶点为止。之后执行出栈操作,退回到尚有未访问过的邻接点的顶点,从该顶点出发,重复之前所述的操作,知道所有被访问过的顶点的邻接点都已被访问为止。
下图中的深度优先遍历结果为ABDCEHJIGF,AFCEHGIJDB等。
4、本程序的基本操作和模块:
确定顶点所对应的下标的函数:locate(ALGraph &G,char ch)
建立图的邻接表存储结构的函数:Create(ALGraph &G,SeqStack &s)
深度优先遍历的函数:DFS(ALGraph &G,int v,SeqStack &s,int visited[],int tag)
判断图是否连通的函数:Judge(ALGraph &G,int visited[],SeqStack &s)
确定非连通图连通分量值的函数:Get(ALGraph &G,int visited[],SeqStack &s)
主函数:main( )
函数的调用关系如下图所示:
三 详细设计
(一)元素类型、结点类型
1、邻接表的表示形式描述
typedef struct node
struct node *
typedef struct vnode
//边表结点 //邻接点域 //指向下一个邻接点的指针域
//顶点表结点
看过本文章的还看过。。。
英数据结构 无向图的存储和遍历_工学_高等教育_教育专区。西北工业大学 教育实验学院 数据结构实验 2011级《数据结构》实验报告◎实验题目:无向图的存储和遍历 ◎实.........
英数据结构-实验6图的存储和遍历 隐藏>> 实验1 实现图的存储和遍历一, 实验...{有向图,有向网,无向图,无向网} *建立有向图的邻接矩阵* typedef .........
英数据结构_图及图的遍历与查找_计算机软件及应用_it计算机_专业资料。数据结构...? 邻接表只能用于有向图的存储,而邻接矩阵对于有向 图和无向图的存储都.........
英图的遍历数据结构实验报告_计算机软件及应用_it计算机_专业资料。山西大学计算机...2、基本要求:以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍历.........
英第3 小组实验报告 数据结构试验报告 实验四 图的存储及应用实验题目:图的遍历...向图的邻接表为基础实现输出它 的拓扑排序序列 ;采用邻接表存储实现无向图的.........
英数据结构-无向图的操作-课程设计-实验报告_工学_高等教育_教育专区。数据结构-...三、在邻接表存储结构上实现深度优先遍历。 课题设计 目的与 设计意义 2、课题.........
英福州大学数计学院 《数据结构》上机实验报告专业和班级:信息计算科学与应用数学 ...向图的邻接表的建立及遍历 实 【实验目的】 验掌握图的存储思想及其存储.........
英数据结构 图的遍历_it计算机_专业资料。图的遍历 实验报告一 学号: 姓名: ...二.算法设计 算法设计 1 设计思想 以邻接矩阵为存储结构,实现无向图的.........
英数据结构课程设计报告样本(图的存储与遍历)_工学_高等教育_教育专区。论文,数据...并且对有向图与无向图都应进行讨 论,根据邻接表的存储结构建立图的邻接表并.........
英a b d 1 图的定义和术语 2 3 图的存储结构图的遍历 4 图的连通性问题 5 有向无环图及其应用 6 最短路径 1 图的定义和术语图的定义图是由顶点的有穷.........
英《数据结构》第 06 章在线测试《数据结构》第 06 章在线测试 答题须知:1、本...a、n 个顶点的无向连通图的边数为 n(n-1) b、图的广度优先遍历过程是一.........
英①输出图 1 所示的有向图 g 从顶点 0 开始的深度优先遍历序列(递归算法); ...【数据结构】图的存储和... 8页 1下载券 数据结构 图的编码实现实... ........
英数据结构第七章图练习及答案_工学_高等教育_教育...a、栈 b、队列 c、树 d、图 4、任何一个无向...采用邻接表存储的图的深度优先遍历算法类似于二叉树.........
英表储存结构、邻 接表的算法实现、图的广度优先搜索遍历、图的深度优先搜索遍历...1 1 数据结构(c 语言版)课程设计报告 第二章 概要分析 1 无向图 无向.........
英北大2015年秋季学期《数据结构》课程作业_教育学_...b 树 采用邻接表存储的图的广度优先遍历算法...已知一个无向图的邻接表表示为: 画出该图的图形.........
英数据结构第三次作业及答案--树和图_it计算机_专业资料。第三次作业---树和...17 d. 16 24、采用邻接表存储的图的广度优先遍历算法类似于二叉树的()。 .........
英数据结构图的遍历与连通性(参考用)_工学_高等教育_教育专区。数据结构学习..无向图的邻接多重表存储表示边结点标志域 边顶点i 边顶点j 链域i 链域j .........
英表为存储结构; 2、实现连通和非连通的无向图的深度优先和广度优先遍历; 3、...设定队列的抽象数据类型: adt queue{ 数据对象:d={ai|ai 属于 elemset,i=........
英指导教师签字 年 1 月 日 一、实验目的: 掌握图的定义及图的存储结构。 ...我完成的是无向图 和无向网的构造,深度优先搜索遍历,广度优先搜索遍历,和相应.........
英摘 要 图(graph)是一种复杂的非线性结构。图可以分为无向图、有向图。若将...对于《图的存储与遍历》这一课题 来说,所要求掌握的数据结构知识主要有:图的.........
■ 24小时热门信息
数据结构无向图数据结构无向图隐藏>> #include #inclu......
数据结构编程——求无向图连通子图_工学_高等教育_教育专区。数据结构编程——求无向图连通子图#include #include void dfs(int **a,in.........
无向图的连通分支问题 - 算法与数据结构_其它考试_资格考试认证_教育专区。无向图的连通分支问题 ?问题描述: 试设计用并查集来计算一个无向图的连通分支的算法.........
1 2 3 4 5 6 实验题目: 姓名: 系名: 指导老师: 《数据结构》实验报告第四次实验《无向图的应用》 陈敏 学号:
专业: 班级: 1320541 计算机工程.........
■ 相关热门内容
无向邻接图的深度优先遍历_it计算机_专业资料。理解并实现无向图邻接表的创建的算法,理解并实现无向图的深度优先遍历的算法;转换成程序并上机实现,并按要求撰写实.........
无向图的输出与深度优先遍历输出_计算机软件及应用_it计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 无向图的输出与深度优先遍历输出_计算机软件及应用_it.........
信息工程学院《数据结构》 课程设计报告 设专小 计业组 题班成 目级员 无向图的深度优先遍历操作 一、题目:无向图的深度优先遍历操作 二、小组任务分工 共同.........
无向图的创建,深度优先遍历和广度优先遍历实现!无向图的创建,深度优先遍历和广度优......
无向图的存储及深度和广度优先遍历_计算机软件及应用_it计算机_专业资料。首先......
图的构造,输入要构造的边的相关信息(总弧数,顶点数,边的两个顶 点的名称,有向图还是无向图) ,对其进行输出显示,并用深度优先搜 索的方法遍历所构建的图。 .........
以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍历_计算机软件及应用......
对无向图g(下图),若从顶点v1开始,按深度优先搜索法进行遍历,则可能的访问顺序......
■ 热门推荐君,已阅读到文档的结尾了呢~~
深度优先遍历算法 c语言遍历文件 c语言遍历文件夹 树深度优先遍历 树的深度优先遍历 c语言遍历数组 深度优先遍历 图的深度优先遍历 二叉树深度优先遍历 有向图深度优先遍历
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C语言深度优先遍历图算法程序实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口图的深度和广度优先搜索遍历&数据结构C语言编程
以邻接表作为图的存储结构,实现连通无向图的深度优先和广度优先遍历。以指定的结点作为起点,分别输出每种遍历下的结点访问序列。
#include&stdio.h&
#include&stdlib.h&
#include&conio.h&
#include&math.h&
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define NULL 0
typedef int S
typedef struct Node
&struct Node *
typedef struct
#define MAX 20
typedef struct
ArcNode&&&&&&
&&&&&&&&&&&&&
//该边所指向的顶点的位置
&struct ArcNode * //指向下一条边
typedef struct
VNode&&&&&&&&&&
&&&&&&&&&&&&&&&
//顶点信息
//指向第一条依附该节点的边的指针
}VNode,AdjList[MAX];
typedef struct
&&&&&&&&&&
//节点的个数
&&&&&&&&&&
//边的条数
Status InitQueue(Queue *Q)
&Q-&front=Q-&rear=(QNode)malloc(sizeof(Node));
&if(!Q-&front)&
exit(OVERFLOW);
&Q-&front-&next=NULL;
&return OK;
Status EnQueue(Queue *Q,int e)
&QNode p=(QNode)malloc(sizeof(Node));
&if(!p) exit(OVERFLOW);
&p-&elem=e;
&p-&next=NULL;
&Q-&rear-&next=p;
&Q-&rear=p;
&return OK;
Status DeQueue(Queue *Q,int *e)
&p=Q-&front-&
&Q-&front-&next=p-&
&if(Q-&rear==p)
Q-&rear=Q-&
&return OK;
Status QueueEmpty(Queue Q)
&if(Q.rear==Q.front)
&& return TRUE;
&& return FALSE;
int LocateVex(Graph *G,int
//返回节点v在图中的位置
&for(i=0;i&G-&++i)
if(G-&vertices[i].data==v)
&if(i&G-&vexnum)
&&& return
&& return -1;
Status CreateGraph(Graph *G)
{//以邻接表形式创建无向连通图G
&int m,n,i,j,k,v1,v2,flag=0;
&ArcNode *p1,*q1,*p,*q;
&printf("Please input the number of VNode:
&scanf("%d",&m);
&printf("Please input the number of ArcNode:
&scanf("%d",&n);
&G-&vexnum=m;&&&&&&&&&&&
//顶点数目
&G-&arcnum=n;&&&&&&&&&&&
//边的数目
&for(i=0;i&G-&++i)
G-&vertices[i].data=i+1;&&&&&
//顶点信息
G-&vertices[i].firstarc=NULL;
&&& //顶点信息
&printf("Output the message of VNode:\n");
&for(i=0;i&G-&++i)
printf("v%d\n",G-&vertices[i].data);
&for(k=0;k&G-&++k)
&& printf("Please input the %d
edge beginpoint and endpoint: ",k+1);
scanf("%d%d",&v1,&v2);
&& i=LocateVex(G,v1);
&& j=LocateVex(G,v2);
if(i&=0&&j&=0)
p=(ArcNode *)malloc(sizeof(ArcNode));
p-&adjvex=j;
p-&nextarc=NULL;
if(!G-&vertices[i].firstarc)
&&G-&vertices[i].firstarc=p;
for(p1=G-&vertices[i].p1-&p1=p1-&nextarc);
p1-&nextarc=p;
q=(ArcNode *)malloc(sizeof(ArcNode));
q-&adjvex=i;
q-&nextarc=NULL;
if(!G-&vertices[j].firstarc)
&&G-&vertices[j].firstarc=q;
&for(q1=G-&vertices[j].q1-&q1=q1-&nextarc);
q1-&nextarc=q;
&&& printf("Not
hava this edge!\n");
printf("The Adjacency List is:\n"); //输出邻接表
&for(i=0;i&G-&++i)
&& printf("\t%d
v%d-&",i,G-&vertices[i].data);
p=G-&vertices[i].
while(p-&nextarc)
printf("%d-&",p-&adjvex);
printf("%d\n",p-&adjvex);
&return OK;
int FirstAdjVex(Graph G,int v)
{//返回v的第一个邻接顶点
&if(G.vertices[v].firstarc)
G.vertices[v].firstarc-&
&& return -1;
int NextAdjVex(Graph G,int v,int w)
{//返回v中相对于w的下一个邻接顶点
&int flag=0;
&ArcNode *p;
&p=G.vertices[v].
if(p-&adjvex==w)
&if(flag &&
p-&nextarc)
p-&nextarc-&
&& return -1;
int Visited[MAX];
void DFS(Graph G,int v)
{//深度优先遍历
&Visited[v]=TRUE;
&&& printf("v%d
",G.vertices[v].data);
&for(w=FirstAdjVex(G,v);w&=0;w=NextAdjVex(G,v,w))
&& if(!Visited[w])
void DFSTraverse(Graph G)
&for(v=0;v&G.++v)
&& Visited[v]=FALSE;
&for(v=0;v&G.++v)
&& if(!Visited[v])
DFS(G,v);&&&&&&
void BFSTraverse(Graph G)
{//广度优先遍历
&int v,v1,w;
q;&&&&&&&&
//定义一个队列
&for(v=0;v&G.++v)
&& Visited[v]=FALSE;
&InitQueue(&q);&&&
//初始化队列
&for(v=0;v&G.++v)
&& if(!Visited[v])
Visited[v]=TRUE;
&&& printf("v%d
",G.vertices[v].data);
EnQueue(&q,v);&&
//第一个顶点入队
while(!QueueEmpty(q))
DeQueue(&q,&v1); //第一个顶点出对
for(w=FirstAdjVex(G,v1);w&=0;w=NextAdjVex(G,v1,w))
if(!Visited[w])
Visited[w]=TRUE;
&&&&&&&&&&&&&&&&&
printf("v%d ",G.vertices[w].data);
EnQueue(&q,w);
&clrscr();
&CreateGraph(&G);
&printf("Depth First Search:\n");
&DFSTraverse(G);
&printf("\nBreadth First Search:\n");
&BFSTraverse(G);
&printf("\n");
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
认清事情的本质!
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(142152)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_084068',
blogTitle:'9、深度优先算法,图的遍历',
blogAbstract:'
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 二叉树 遍历 c语言 的文章

 

随机推荐