算法与数据结构 实验四

发布 2021-05-02 17:52:28 阅读 1836

实验名称类别辅助教师授课对象教材讲义。

图。必修(√)限选(

任选(实验编号实验课时。类型。

演示、验证(√)综合、设计()职称。

信计141-2

实验内容(教学过程)

实验目的实验装置实验准备实验内容思考题实验报告要求。

备注。掌握图的建立和遍历。

计算机。课前预习。

1.建立一个无向图;

2.利用深度遍历方式实现图的遍历。

书写。附录:

参考算法如下:1.头文件。

/使用邻接链表实现图的建立#includeusingnamespacestd;

#definemax_vex30//最大顶点数typedefintinfotype;typedefintvextype;

typedefenumgraphkind;

/表结点类型定义。

typedefstructlinknodelinknode;

/顶点结点类型定义typedefstructvexnodevexnode;

/弧或边的结构定义typedefstructarctypearctype;

/图的结构定义。

typedefstructalgraphalgraph,*alggraph;

/深度优先遍历图。

typedefenumboolean;booleanvisited[max_vex];

/广度优先遍历图typedefstructqueuequeue;//定义一个队列保存将要访问顶点//图的创建。

algraph*create_graph(alggraph&g);

/向图中增加顶点,在adjlist数组的末尾增加一个数据元素。intaddvertex(algraph*g,vextypevp);

/图的顶点定位,确定一个顶点在adjlist数组中的某个元素的data域内容。intlocatevex(algraph*g,vextypevp);/向图中增加一条弧。

intaddarc(algraph*g,arctype*arc);/深度优先遍历图。

voiddfs(alggraph&g,intv);/用邻接表实现voiddfs_tr**erse_graph(alggraph&g);

2.源程序文件。

alggraphg;

create_graph(g);

inti;for(i=1;i<=7;i++)

intm;arctype*arc=newarctype;arc->vex1=1;arc->vex2=2;

m=addarc(g,arc);arc=newarctype;arc->vex1=1;arc->vex2=3;

m=addarc(g,arc);arc=newarctype;arc->vex1=1;arc->vex2=4;

m=addarc(g,arc);arc=newarctype;arc->vex1=1;arc->vex2=5;

m=addarc(g,arc);arc=newarctype;arc->vex1=2;arc->vex2=3;

m=addarc(g,arc);arc=newarctype;arc->vex1=4;arc->vex2=5;

m=addarc(g,arc);arc=newarctype;arc->vex1=3;arc->vex2=6;

m=addarc(g,arc);arc=newarctype;arc->vex1=3;arc->vex2=7;

m=addarc(g,arc);arc=newarctype;arc->vex1=6;arc->vex2=7;

m=addarc(g,arc);cout

algraph*create_graph(alggraph&g)

/向图中增加顶点,在adjlist数组的末尾增加一个数据元素。intaddvertex(algraph*g,vextypevp)

if(locatevex(g,vp)!=1)

g->adjlist[g->vexnum].data=vp;g->adjlist[g->vexnum].degree=0;g->adjlist[g->vexnum].

firstarc=null;k=++g->vexnum;return(k);}

/图的顶点定位,确定一个顶点在adjlist数组中的某个元素的data域内容。intlocatevex(algraph*g,vextypevp)

return(-1);/图中无此顶点}

/向图中增加一条弧。

/根据给定的弧或边所依附的顶点,修改单链表:无向图修改两个单链表;有向图修改一个单链表。

intaddarc(algraph*g,arctype*arc)

/边的起始表结点赋值。

p=(linknode*)malloc(sizeof(linknode));p->adjvex=k;p->info=arc->info;p->nextarc=null;

/边的末尾表结点赋值。

q=(linknode*)malloc(sizeof(linknode));q->adjvex=j;q->info=arc->info;q->nextarc=null;

/无向图,用头插入法插入到两个单链表if(g->kind==ag||g->kind==wag)

else//有向图的邻接链表,用头插入法。

return(1);}

g->adjlist[k].firstarc;=q;//建立正邻接链表用。

/从下标为v的结点出发深度优先遍历图。

voiddfs(alggraph&g,intv)//用邻接表实现。

p=p->nextarc;//从v的未访问过的邻接顶点出发深度优先搜索}}

/深度优先遍历图。

voiddfs_tr**erse_graph(alggraph&g)

for(v=0;vvexnum;v++)

算法与数据结构实验

实验1 adt list 线性表 6学时 问题描述 线性表是典型的线性结构,实现adt list,并在此基础上实现两个集合的交运算和并运算。实验目的 1 掌握线性表的链表存储结构。2 掌握在单链表上基本操作的实现。3 在掌握单链表的基本操作上进行综合题的实现。实验内容及要求 1 要求用带头结点的单链...

算法与数据结构实验

福建农林大学实验报告。系 教研室 计算机专业年级实验课程。姓名学号实验室号计算机号。实验时间指导教师签字成绩。实验四实现fibonacci检索算法 验证性 4学时 一 实验目的和要求。掌握不同的检索方法,并能用高级语言实现检索算法 熟练掌握顺序表和有序表的检索方法,以及静态检索树的构造方法和检索算法...

数据结构与算法实验

计算机科学与技术系。实验报告。专业名称网络系统管理 课程名称数据结构与算法 项目名称堆栈实验 班级 13网络系统管理 学号 1304052010 姓名汪康。同组人员。实验日期。一 实验目的与要求 1 掌握堆栈的两种不同的存储结构。2 掌握应用堆栈表示数据 并进行有关算法设计的方法。二 实验背景 堆栈...