数据结构实验六图

发布 2019-07-09 02:23:35 阅读 5737

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 学年第一学期 课程名称 数据结构开课实验室年月日。一。实验内容 二叉树的建立与遍历,其中遍历有前序遍历,中序遍历和后序遍历。以及二叉树中序线索化及线索化遍历。二。实验目的 学会二叉树二叉链表非线性存储结构上实现的各种算法。三。主要程序 分...