邻接表表示的带权有向图(网)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
===实习报告一“邻接表表示的带权有向图(网)”演示程序===
(一)、程序的功能和特点
1. 程序功能:建立有向图的带权邻接表,能够对建立的邻接表进行添加顶点,添加边和删除顶点,删除边的操作,并能显示输出邻接表。
2. 程序特点:采用java面向对象语言,对边,顶点和邻接表用类进行封装。采用链式存储结构。
(二八程序的算法设计
算法一:“插入一个顶点”算法:
1. 【逻辑结构与存储结构设计】
逻辑结构:线性结构。存储结构:顺序存储与链式存储结合。
邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法。。邻接表表示法类似于树的孩子链表表示法。就是对于图G中的每个顶点vi,将所有邻接于vi的顶点vj链成一个单链表,这个单链表就称为顶点vi的邻接表,再将所有点的邻接表表头放到数组中,就构成了图的邻接表。如下图就是一个临界表的存储图。
vertex firstedge
adjvex n ext
序号vertex firstedge
图的邻接表表示在邻接表表示中有两种结点
结构,如图所示。
邻接矩阵表示的结点结构
顶点域边指针
流程示意图:顶点数据组成的数组
顶点数组表的顺序存储: V0 V1— V2—
O
2.【基本操作设计】
文字说明: (1) .首先判断顶点表是否满。 (2) .若满则插入失败,放回false 。 (3) .顶点表若不满,创建新顶点,将新顶点加入顶点表 (4) .插入顶点成功,返回true 。
添加顶点前状态
添加顶点v2后 网图的边表结构
//插入一个顶点
public boolea n In sertVertex ( char vertex ){ if (NumVertices
==MaxVertices ) return false ; // 顶点表满
Vertex t= n ewVertex();
t. data =vertex;
t. adj =null ;
NodeTable[ NumVertices ]=t;
NumVertices++;
//注明:企图以下赋值不合Java 语法
〃NodeTable[NumVertices].data=vertex;
〃NodeTable[NumVertices].adj=null; return true ;
}
算法二:“插入一条边”算法:
1. 【逻辑结构与存储结构设计】
逻辑结构:线性结构。
存储结构:链式存储结构
网图的边表结构如图所示。
邻接点域
4.【高级语言代码】
2. 【基本操作设计】基本操作:
3. 【算法设计】
文字说明:
(1).首先判断插入边上的两个顶点编号是否越界。
if (v1>= NumVertices ||v1<0) return false ;
if (v2>= NumVertices ||v2<0) return false ;
(2).如果越界则插入失败,返回false。
(3).否则创建新边结点,以v2顶点和该边上的权创建新边结点(4).再将新创建的边结点连接到v1顶点的单链表后面。
(5).插入成功返回true。
4. 【高级语言代码】
//插入一条边
public boolean InsertEdge ( int v1, int v2, double weight ){ if (v1>= NumVertices ||v1<0)
return false ;
if (v2>= NumVertices ||v2<0) return false ;
//生成一个边结点,并赋值
Edge E=n ewEdge(v2,weight);
//链接在以v1为起点的单链表的最后
Edge p=NodeTable[v1]. adj;
//插入第一个边结点
if ( p== null ) NodeTable[v1]. adj =E; else { //插入其它边结点while (p. link !=null ) p=p. link ;
p. link =E;
}
NumEdges+; //当前顶点数return true ;
} return true ;
}
(三八程序中类的设计
“ Edge” 类:
1. I逻辑结构与存储结构】
逻辑结构:线性结构。存储结构:链式存储结构
在邻接表表示中边结点结构,如图所示。
边表
邻接矩阵表示的边的结构
2. 【主要成员变量说明】主要成员变量有:
int dest;表示邻接点下标。
double cost ;表示边上的权值
Edge link ; 表示下一边链接指针
3. 【主要成员方法说明】
lin k(i nt iD,double fD) 为结点类有两个参数的构造函数
void lin kDisplay() 显示结点自身的数据域。
4. 【高级语言代码】
//边结点类
class Edge {
int dest; //邻接点下标
double cost; //边上的权值
//下一边链接指针
Edge link ;
//构造函数:生成边结点
Edge ( int D, double C )
{
dest =D;
cost =C; link =null ;
}
};
“ Vertex ”类:
1. I逻辑结构与存储结构】
逻辑结构:线性结构。存储结构:链式存储结构在邻接表表示中顶点结构,如图所示。
2. 【主要成员变量说明】
主要成员变量为:
char data;顶点的数据域。
Edge adj ;边链表头指针。
3. 【主要成员方法说明】该类有默认的构造方法。
4. 【高级语言代码】
//顶点类
class Vertex {
char data ; //
顶点数据
Edge adj; //边链表头指针
};
“ GraphAdj ” 类:
4.【逻辑结构与存储结构】
逻辑结构:线性结构。存储结构:顺序存储与链式存储结合邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法。
序号vertex firstedge
图的邻接表表示