1、掌握图的邻接矩阵和邻接表表示。
2、掌握图的深度优先和广度优先搜索方法
3、理解图的应用方法。
1、阅读并运行下面程序,根据输入写出运行结果。
#include<>
#define n 20
#define true 1
#define false 0
int visited[n];
typedef struct /*队列的定义*/
int data[n];
int front,rear;
queue;
typedef struct /*图的邻接矩阵*/
int vexnum,arcnum;
char vexs[n];
int arcs[n][n];
graph;
void creategraph(graph *g); 建立一个无向图的邻接矩阵*/
void dfs(int i,graph *g); 从第i个顶点出发深度优先搜索*/
void tdfs(graph *g深度优先搜索整个图*/
void bfs(int k,graph *g); 从第k个顶点广度优先搜索*/
void tbfs(graph *g广度优先搜索整个图*/
void init_visit初始化访问标识数组*/
void creategraph(graph *g) /建立一个无向图的邻接矩阵*/
int i,j;
char v;
g->vexnum=0;
g->arcnum=0;
i=0;printf("输入顶点序列(以#结束):");
while((v=getchar())#
g->vexnum=i顶点数目*/
for(i=0;ivexnum;i++)邻接矩阵初始化*/
for(j=0;jvexnum;j++)
g->arcs[i][j]=0;
printf("输入边的信息:");
scanf("%d,%d",&i,&j); 读入边i,j*/
while(i!=-1读入i,j为-1时结束*/
void dfs(int i,graph *g) /从第i个顶点出发深度优先搜索*/
int j;
printf("%c",g->vexs[i]);
visited[i]=true;
for(j=0;jvexnum;j++)
if((g->arcs[i][j]==1)&&visited[j]))
dfs(j,g);
void tdfs(graph *g) /深度优先搜索整个图*/
int i;
printf("从顶点%c开始深度优先搜索序列:",g->vexs[0]);
for(i=0;ivexnum;i++)
if(visited[i]!=true)
dfs(i,g);
void bfs(int k,graph *g) /从第k个顶点广度优先搜索*/
int i,j;
queue qlist,*q;
q=&qlist;
q->rear=0;
q->front=0;
printf("%c",g->vexs[k]);
visited[k]=true;
q->data[q->rear]=k;
q->rear=(q->rear+1)%n;
while(q->rear!=q->front)
void tbfs(graph *g) /广度优先搜索整个图*/
int i;
printf("从顶点%c开始广度优先搜索序列:",g->vexs[0]);
for(i=0;ivexnum;i++)
if(visited[i]!=true)
bfs(i,g);
void init_visit() 初始化访问标识数组*/
int i;
for(i=0;i visited[i]=false;
int main()
graph ga;
int i,j;
creategraph(&ga);
printf("无向图的邻接矩阵:");
for(i=0;i<
for(j=0;j<
printf("%3d",printf("");
init_visit();
tdfs(&ga);
init_visit();
tbfs(&ga);
return 0;
根据右图的结构验证实验,输入:
abcdefgh#
运行结果:2、阅读并运行下面程序,补充拓扑排序算法。
#include<>
#include<>
#define n 20
typedef struct edgenode
n=i;*p=n;
/*建立邻接链表*/
printf("请输入弧的信息(i=-1结束):i,j:");
scanf("%d,%d",&i,&j);
while(i!=-1)
printf("邻接表:")
for(i=0;i printf("%c,%d:",adjlist[i].data,adjlist[i].ind);
s=adjlist[i].link;
while(s!=null)
void topsort(vnode g,int n){ 拓扑排序*/
int main(){
vnode adjlist[n];
int n,*p;
p=&n;
数据结构实验数组
crosslist ma int z 主函数 void main creatmatrix ma out m ma main 十字链表的输出 void out m crosslist m printf printf 打回车键,返回。ch getchar void creatmatrix crossli...
数据结构实验队列 附程序
实验三队列。一 实验目的。1.了解队列的特性。2.掌握队列的顺序表示和实现。3.掌握队列的链式表示和实现。二 实验内容。实验3.3队列的顺序表示和实现。编写一个程序实现顺序队列的各种基本运算 采用循环队列 并在此基础上设计一个主程序,完成如下功能 1 初始化队列。2 建立顺序队列。3 入队。4 出队...
数据结构实验一顺序表的实现
班级学号姓名分数 一 实验目的 1.熟悉线性表的基本运算在两种存储结构 顺序结构和链式结构 上的实现 2.以线性表的各种操作的实现为重点 3.通过本次学习帮助学生加深c语言的使用,掌握算法分析方法并对已经设计出的算法进行分析,给出相应的结果。二 实验要求 编写实验程序,上机运行本程序,保存程序的运行...
数据结构实验一顺序表问题及实验报告Copy
实验一顺序表问题。实验报告 顺序表的查找 插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找 插入与删除。具体实现要求 1.从键盘输入10个整数,产生顺序表,并输出结点值。调试数据 9 8 7 6 5 4 3 2 1 2.从键盘输入1个整数,在顺序表中查找该结点。若找到,输出结点的位置...
数据结构,二维指针和数组 还有数据结构
自己建立头文件格式 include 指针 指针变量 是用来存放变量的存储地址的。p null int a 3 例如 p a 结论 p a p 3 指针变量定义的格式 类型名 指针名。最好采用int p 取值符号 后面加 地址 表示取这个地址里的值。地址符号 后面加 变量 表示取这个变量的地址。voi...
数据结构实验 二叉树的操作
实验题目 二叉树的操作 实验者信息 班级 13007102,姓名庞文正,学号 1300710226 实验完成的时间 3 00 一 实验目的。1,掌握二叉树链表的结构和二叉树的建立过程。2,掌握队列的先进先出的运算原则在解决实际问题中的应用。3,进一步掌握指针变量 指针数组 动态变量的含义。4,掌握递...
数据结构 习题集
基础篇。习题1 一 选择题。1 计算机算法必须具备输入 输出 b 等5个特性。a 可行性 可移植性和可扩展性b 可行性 确定性和有穷性。c 确定性 有穷性和稳定性d 易读性 安全性和稳定性。2 在数据结构中,从逻辑上可以把数据结构分为 d a 动态结构和静态结构b 紧凑结构和非紧凑结构。c 内容结构...
数据结构实验报告实验三二叉树的建立与遍历
昆明理工大学信息工程与自动化学院学生实验报告。201 201 学年第一学期 课程名称 数据结构开课实验室年月日。一。实验内容 二叉树的建立与遍历,其中遍历有前序遍历,中序遍历和后序遍历。以及二叉树中序线索化及线索化遍历。二。实验目的 学会二叉树二叉链表非线性存储结构上实现的各种算法。三。主要程序 分...