邻接表表示的带权有向图(网)

合集下载

计算机专业基础综合数据结构(图)历年真题试卷汇编4

计算机专业基础综合数据结构(图)历年真题试卷汇编4

计算机专业基础综合数据结构(图)历年真题试卷汇编4(总分:58.00,做题时间:90分钟)一、综合题(总题数:7,分数:14.00)1.已知一图如下图所示:(1)写出全部拓扑排序;(2)以V1为源点,以V8为终点,给出所有事件允许发生的最早时间和最晚时间,并给出关键路径;(3)求V1结点到各点的最短距离。

【北京邮电大学2000五(15分)】__________________________________________________________________________________________正确答案:(正确答案:关键路径有3条,长17。

各事件允许发生的最早时间和最晚时间略。

V1→V2→V6→V8,V1→V3→V5→V7→V8,V1→V7→V8→V1→V4→V5→V8 (3)V1结点到其他各结点的最短距离为:2,3,6,12,10,15,16。

)2.(1)对于有向无环图,叙述求拓扑有序序列的步骤;(2)对于以下的图,写出它的四个不同的拓扑有序序列。

【南开大学1998二(12分)】__________________________________________________________________________________________ 正确答案:(正确答案:(1)对有向图,求拓扑序列步骤为: 1)在有向图中选一个没有前驱(即入度为零)的顶点并输出。

2)在图中删除该顶点及所有以它为尾的弧。

3)重复1)和2),直至全部顶点输出,这时拓扑排序完成;否则,图中存在环,拓扑排序失败。

(2)这里使用形式化描述方法,当有多个顶点可以输出时,将其按序从上往下排列,这样不会丢掉拓扑序列。

这里只画出从顶点1开始的所有可能的拓扑序列,从顶点3开始的拓扑序列可类似画出。

)3.有向图的拓扑排序能否用图的深度搜索模式来查找?若能,请简述方法;若不能,请简述原因。

【西北大学2000二、8(5分)】__________________________________________________________________________________________ 正确答案:(正确答案:图的深度优先遍历可用于拓扑排序。

计算机学科专业基础综合数据结构-图(二)_真题-无答案

计算机学科专业基础综合数据结构-图(二)_真题-无答案

计算机学科专业基础综合数据结构-图(二)(总分100,考试时间90分钟)一、单项选择题(下列每题给出的4个选项中,只有一个最符合试题要求)1. 具有6个顶点的无向图至少应有______条边才能确保是一个连通图。

A.5 B.6 C.7 D.82. 设G是一个非连通无向图,有15条边,则该图至少有______个顶点。

A.5 B.6 C.7 D.83. 下列关于无向连通图特性的叙述中,正确的是______。

①所有顶点的度之和为偶数②边数大于顶点个数减1③至少有一个顶点的度为1A.只有① B.只有② C.①和② D.①和③4. 对于具有n(n>1)个顶点的强连通图,其有向边的条数至少是______。

A.n+1B.nC.n-1D.n-25. 下列有关图的说法中正确的是______。

A.在图结构中,顶点不可以没有任何前驱和后继 B.具有n个顶点的无向图最多有n(n-1)条边,最少有n-1条边 C.在无向图中,边的条数是结点度数之和 D.在有向图中,各顶点的入度之和等于各顶点的出度之和6. 对于一个具有n个顶点和e条边的无向图,若采用邻接矩阵表示,则该矩阵大小是______,矩阵中非零元素的个数是2e。

A.n B.(n-1)2 C.n-1 D.n27. 无向图的邻接矩阵是一个______。

A.对称矩阵 B.零矩阵 C.上三角矩阵 D.对角矩阵8. 从邻接矩阵可知,该图共有______个顶点。

如果是有向图,该图共有4条有向边;如果是无向图,则共有2条边。

A.9 B.3 C.6 D.1 E.5 F.4 G.2 H.09. 下列说法中正确的是______。

A.一个图的邻接矩阵表示是唯一的,邻接表表示也唯一 B.一个图的邻接矩阵表示是唯一的,邻接表表示不唯一 C.一个图的邻接矩阵表示不唯一,邻接表表示唯一 D.一个图的邻接矩阵表示不唯一,邻接表表示也不唯一10. 用邻接表存储图所用的空间大小______。

A.与图的顶点数和边数都有关 B.只与图的边数有关 C.只与图的顶点数有关 D.与边数的二次方有关11. 采用邻接表存储的图的深度优先搜索算法类似于二叉树的______,广度优先搜索算法类似于二叉树的层次序遍历。

算法与数据结构课设(有向图,无向图,有向网,无向网)

算法与数据结构课设(有向图,无向图,有向网,无向网)

算法与数据结构课程设计报告系(院):计算机科学学院专业班级:教技1001姓名:李##学号: ******### 指导教师:***设计时间:2012.6.16 - 2012.6.24设计地点:4号楼2号机房目录一、设计方案 (1)二、实现过程以及代码 (2)三、测试 (20)四、结论和分析 (23)五、难点和收获 (23)一、 设计方案1.程序设计基本过程:拿到课程设计任务书,按照要求,需要设计有向图、有向网、无向图 、无向网四种图,以及邻接矩阵、邻接表两种数据存储结构,三层以上的显示菜单。

图的操作中又包含了有关线性表、栈和队列的基本操作。

由于显示菜单已给出,剩下的任务就是把函数写入其中。

2.程序流程图:预定义 定义结构体 定义变量 各种函数3.程序设计的原理:图的操作都是以两种存储结构为基础的:邻接矩阵存储结构和邻接表存储结构,如有向图,有向网,无向图,无向网的创建,其他的操作都是在四种图创建后才开始进行的。

所以,首先必须理解两种存储结构的定义。

图的邻接矩阵存储结构即图的数组表示法。

用两个数组分别存储数据元素(如顶点)的信息和数据元素之间的关系(如边或弧)的信息。

用邻接矩阵存储结构的图具有以下几点特征:(一):顶点数:vexnum ,边(弧)数:arcnum ,图的种类:kind ;(二):邻接矩阵:arcs(1顶点关系类型:adj 2相关信息:*info);(三):顶点向量(顶点名):vexs[];其优点是以二维数组表示有n 个顶点的图时,需存放n 个顶点的信息和n*n 条弧的信息存储量。

借助邻接矩阵容易判定任意两个顶点之间是否有边或弧相连,并容易求出各个顶点的度。

缺点是时间复杂度是O (n*n ),例如,构造一个具有n 个顶点和e 条边的无向网的时间复杂度为O (n*n+e*n )。

图的邻接表存储结构是图的一种链式存储结构。

对图中的每个顶点建立一个单链表,每个结点由三个域组成,邻接点域adjvex (弧尾在邻接表链表中的位序),链域nextarc (下一条弧),数据域info(权值)。

最短路问题(整理版)

最短路问题(整理版)

最短路问题(short-path problem)若网络中的每条边都有一个权值值(长度、成本、时间等),则找出两节点(通常是源节点与结束点)之间总权和最小的路径就是最短路问题。

最短路问题是网络理论解决的典型问题之一,可用来解决管路铺设、线路安装、厂区布局和设备更新等实际问题。

最短路问题,我们通常归属为三类:单源最短路径问题(确定起点或确定终点的最短路径问题)、确定起点终点的最短路径问题(两节点之间的最短路径)1、Dijkstra算法:用邻接矩阵a表示带权有向图,d为从v0出发到图上其余各顶点可能达到的最短路径长度值,以v0为起点做一次dijkstra,便可以求出从结点v0到其他结点的最短路径长度代码:procedure dijkstra(v0:longint);//v0为起点做一次dijkstrabegin//a数组是邻接矩阵,a[i,j]表示i到j的距离,无边就为maxlongintfor i:=1 to n do d[i]:=a[v0,i];//初始化d数组(用于记录从v0到结点i的最短路径), fillchar(visit,sizeof(visit),false);//每个结点都未被连接到路径里visit[v0]:=true;//已经连接v0结点for i:=1 to n-1 do//剩下n-1个节点未加入路径里;beginmin:=maxlongint;//初始化minfor j:=1 to n do//找从v0开始到目前为止,哪个结点作为下一个连接起点(*可优化) if (not visit[j]) and (min>d[j]) then//结点k要未被连接进去且最小begin min:=d[j];k:=j;end;visit[k]:=true;//连接进去for j:=1 to n do//刷新数组d,通过k来更新到达未连接进去的节点最小值,if (not visit[j]) and (d[j]>d[k]+a[k,j]) then d[j]:=a[k,j]+d[k];end;writeln(d[n]);//结点v0到结点n的最短路。

图的邻接表表示法

图的邻接表表示法

图的邻接表表示法图的邻接表表示法类似于树的孩子链表表示法。

对于图G中的每个顶点v i,该方法把所有邻接于v i的顶点v j链成一个带头结点的单链表,这个单链表就称为顶点v i的邻接表(Adjacency List)。

1.邻接表的结点结构(1:① 邻接点域adjvex存放与vi相邻接的顶点v j的序号j。

② 链域next将邻接表的所有表结点链在一起。

注意:若要表示边上的信息(如权值),则在表结点中还应增加一个数据域。

顶点v i邻接表的头结点包含两个域:① 顶点域vertex存放顶点v i的信息② 指针域firstedgev i的邻接表的头指针。

注意:① 为了便于随机访问任一顶点的邻接表,将所有头结点顺序存储在一个向量中就构成了图的邻接表表示。

② 有时希望增加对图的顶点数及边数等属性的描述,可将邻接表和这些属性放在一起来描述图的存储结构。

2.无向图的邻接表对于无向图,v i的邻接表中每个表结点都对应于与v i相关联的一条边。

因此,将邻接表的表头向量称为顶点表。

将无向图的邻接表称为边表。

【例】对于无向图G5,其邻接表表示如下面所示,其中顶点v0的边表上三个表结点中的顶点序号分别为1、2和3,它们分别表示关联于v0的三条边(v0,v1),(v0,v2)和(v0,v3)。

注意:n个顶点e条边的无向图的邻接表表示中有n个顶点表结点和2e个边表结点。

3.有向图的邻接表对于有向图,v i的邻接表中每个表结点都对应于以v i为始点射出的一条边。

因此,将有向图的邻接表称为出边表。

【例】有向图G6的邻接表表示如下面(a)图所示,其中顶点v1的邻接表上两个表结点中的顶点序号分别为0和4,它们分别表示从v1射出的两条边(简称为v1的出边):<v1,v0>和<v1,v4>。

注意:n个顶点e条边的有向图,它的邻接表表示中有n个顶点表结点和e个边表结点。

4.有向图的逆邻接表在有向图中,为图中每个顶点v i建立一个入边表的方法称逆邻接表表示法。

[考研类试卷]计算机专业基础综合数据结构(图)历年真题试卷汇编9.doc

[考研类试卷]计算机专业基础综合数据结构(图)历年真题试卷汇编9.doc

[考研类试卷]计算机专业基础综合数据结构(图)历年真题试卷汇编9 一、综合题1 下面的邻接表表示一个给定的无向图。

(1)给出从顶点v1开始,对图G用深度优先搜索法进行遍历时的顶点序列;(2)给出从顶v1,1开始,对图G用广度优先搜索法进行遍历时的顶点序列。

【复旦大学1998六(10分)】1 给出图G:2 画出G的邻接表表示图;3 根据你画出的邻接表,以顶点①为根,画出G的深度优先生成树和广度优先生成树。

【南开大学1997五(14分)】【烟台大学2007四、3(15分)】4 已知一个有向图如图所示,则从顶点a出发进行深度优先遍历,写出所有可能得到的DFS序列。

【北京交通大学2006四、4(5分)】4 解答下面的问题:【西安电子科技大学2000计算机应用六(10分)】5 如果每个指针需要4字节,每个顶点的标号占2字节,每条边的权值占2字节。

下图采用哪种表示法所需的空间较多?为什么?6 写出下图从顶点1开始的:DFS树。

7 如下所示的连通图,请画出:(1)以顶点①为根的深度优先生成树;(5分)(2)如果有关节顶点,请找出所有的关节顶点。

(5分)【清华大学l 998七(10分)】7 某田径赛中各选手的参赛项目表如下:设项目A,B,…,F各表示一数据元素,若两项目不能同时举行,则将其连线(约束条件)。

8 根据此表及约束条件画出相应的图状结构模型,并画出此图的邻接表结构;9 写出从元素A出发按“广度优先搜索”算法遍历此图的元素序列。

【北京科技大学1999五2000五(12分)】10 考虑下图:(1)从顶点A出发,求它的深度优先生成树。

(2)从顶点E出发,求它的广度优先生成树。

(3)根据普利姆(Prim)算法,求它的最小生成树。

【上海交通大学1999六(12分)】11 在什么情况下,Prim算法与Kruskual算法生成不同的MST?【西安电子科技大学2000计算机应用一、11(5分)】12 已知一个无向图如下图所示,要求分别用Prim和Kruskal算法生成最小生成树(假设以①为起点,试画出构造过程)。

邻接表表示图的各结点的度数(无向图)出度(有向图)

邻接表表示图的各结点的度数(无向图)出度(有向图)

邻接表表⽰图的各结点的度数(⽆向图)出度(有向图)#include<iostream>#include<string.h>using namespace std;#define MAX_VERTEX_NUM 50 //定义最⼤的结点数typedef enum{DG,UDG}GraphKind; //定义图的种类DG(有向图) UDG(⽆向图)typedef char VertexData; //定义结点信息的数据类型//定义弧结点typedef struct EdgeNode{int adjvex; //该弧指向顶点的位置VertexData data;EdgeNode *next;}EdgeNode;//定义表头结点typedef struct VetexNode{VertexData data;EdgeNode *link;}VetexNode;//定义基于邻接表的图typedef struct AdjList{int vexNun,arcNun; //定义邻接表的顶点数,弧数VetexNode vertex[MAX_VERTEX_NUM];GraphKind kind;}AdjList;// 创建图,输⼊信息包括(图的定点数,边数,图的种类,及每条边的起始,结束位置)void CreateGraph(AdjList *adj,int *n){int e,s,d;char str;cout<<"输⼊顶点数(n)和边数(e)\n";cin>>*n>>e;adj->arcNun=*n;adj->vexNun=e;cout<<"选择图的类型有向图(D)⽆向图(U)\n";cin>>str;//判断图的类型switch(str){case 'D': adj->kind=DG;break;case 'U': adj->kind=UDG;break;default :cout<<"没有此类型的图\n";break;}EdgeNode *q=NULL;//初始化n个表头结点for(int i=1;i<=*n;i++){cout<<"输⼊第"<<i<<"个结点的信息\n";cin>>adj->vertex[i].data;adj->vertex[i].link=NULL;}for(i=1;i<=e;i++){cout<<"请输⼊边的起始与⽬的位置\n";cin>>s>>d;cout<<"请输⼊⽬的结点的信息\n";q=(EdgeNode *)malloc(sizeof(EdgeNode));if(q==NULL) return;q->adjvex=d;cin>>q->data;q->next=adj->vertex[s].link;adj->vertex[s].link=q;}}//显⽰图的每条边void DispGraph(AdjList *adj){int n=adj->arcNun;cout<<"所有的边为:\n";EdgeNode *q=NULL;for(int i=1;i<=n;i++){q=adj->vertex[i].link;if(q==NULL){cout<<"没有从"<<adj->vertex[i].data<<"出发的结点\n";}else{cout<<"从结点"<<adj->vertex[i].data<<"出发的"<<"边是\n";while(q!=NULL){cout<<adj->vertex[i].data<<"->"<<q->data<<"\n";q=q->next;}}}}//如果是有向图求得每个结点的出度,⽆向图求得每个结点的度数void GetNodeDu(AdjList *adj){int countDu;EdgeNode *q=NULL;for(int i=1;i<=adj->arcNun;i++){countDu=0;q=adj->vertex[i].link;while(q!=NULL){countDu++;q=q->next;}if(adj->kind==DG)cout<<"结点"<<adj->vertex[i].data<<"的出度为"<<countDu<<"\n";else if(adj->kind==UDG)cout<<"结点"<<adj->vertex[i].data<<"的度数为"<<countDu<<"\n";}}int main(){int n;AdjList * adj=(AdjList *)malloc(sizeof(AdjList));CreateGraph(adj,&n);DispGraph(adj);GetNodeDu(adj);return 0;}转⾃/jaychang_z/blog/item/b6f3e5d8e3a08b2411df9bc4.html。

习题答案 (1)分析

习题答案 (1)分析

1.已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为()。

A.-A+B*C/DE B.-A+B*CD/E C.-+*ABC/DE D.-+A*BC/DE参考答案:D3.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()。

A.250 B.500 C.254 D.505 E.以上答案都不对参考答案:E8.在一棵三元树中度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为()个。

A.4 B.5 C.6D.7参考答案:C10.具有10个叶结点的二叉树中有()个度为2的结点。

A.8 B.9C.10 D.11参考答案:B53.由3个结点可以构造出()种不同的二叉树。

A.2 B.3 C.4 D.5参考答案:D47.引入二叉线索树的目的是()。

A.加快查找结点的前驱或后继的速度B.为了能在二叉树中方便的进行插入与删除C.为了能方便的找到双亲D.使二叉树的遍历结果唯一19.将如下由三棵树组成的森林转换为二叉树。

参考答案:HGDACJIBFEMPONKOL反过来,将一个二叉树转化成森林或树?(注意:转化成森林的结果和转化成树的结果不一样)21.设某二叉树的前序遍历序列为ABCDEFGGI ,中序遍历序列为BCAEDGHFI ,试画出该二叉树。

参考答案:27.设二叉树T 的存储结构如下:1 2 3 4 5 6 7 8 9 10Lchild 0 0 2 3 7 5 8 0 10 1 Data JH F D B A C E G I Rchild0 094其中Lchild 、Rchild 分别为结点的左、右孩子指针域,Data 为结点的数据域,若根指针T 的值为6,试:(1)画出二叉树的逻辑结构;(2)写出按前序、中序、后序遍历该二叉树所得到的结点序列;(3)画出二叉树的后序线索树。

参考答案:前序序列:ABCEDFHGIJ 中序序列:ECBHFDJIGA 后序序列:ECHFJIGDBA31.假定用于通讯的电文仅有8个字母C1,C2,…,C8组成,各个字母在电文中出现的频率分别为5,25,3,6,10,11,36,4,试为这8个字母设计哈夫曼编码树。

七图

七图

n图的基本概念n图的存储结构n图的遍历与连通性n最小生成树n最短路径n活动网络7.1图的基本概念n图定义图是由顶点集合(vertex)及顶点间的关系集合组成的一种数据结构:Graph=( V, E )其中V= { x| x ∈某个数据对象}是顶点的有穷非空集合;E= {(x, y) |x, y ∈V }或E= {<x, y>|x, y ∈V&& Path(x, y)}是顶点之间关系的有穷集合,也叫做边(edge)集合。

Path(x, y)表示从x 到y 的一条单向通路, 它是有方向的。

n有向图与无向图在有向图中,顶点对<x, y>是有序的。

在无向图中,顶点对(x, y)是无序的。

n完全图若有n 个顶点的无向图有n(n-1)/2 条边, 则此图为完全无向图。

有n 个顶点的有向图有n(n-1) 条边, 则此图为完全有向图。

邻接顶点如果(u, v) 是E(G) 中的一条边,则称u 与v 互为邻接顶点。

n权某些图的边具有与它相关的数,称之为权。

这种带权图叫做网络。

n 子图设有两个图G =(V ,E )和G ,=(V ,,E ,)。

若V ,⊆V 且E,⊆E ,则称图G ,是图G 的子图。

n顶点v 的入度是以v 为终点的有向边的条数, 记作ID(v ); n顶点v 的出度是以v 为始点的有向边的条数, 记作OD(v )。

n 在有向图中, 顶点的度等于该顶点的入度与出度之和。

n 路径在图G =(V , E ) 中, 若从顶点v i 出发, 沿一些边经过一些顶点v p 1, v p 2, …, v pm ,到达顶点v j 。

则称顶点序列( v i v p 1 v p 2 ... v pm v j )为从顶点v i 到顶点v j 的路径。

它经过的边(v i , v p 1)、(v p 1, v p 2)、...、(v pm ,v j )应是属于E 的边。

n 路径长度u 非带权图的路径长度是指此路径上边的条数。

第6章 图习题解析

第6章 图习题解析

第六章图习题解析1一、选择题1、设无向图的顶点个数为n,则该无向图最多有 B 条边。

A、n-1B、n(n-1)/2C、n(n+1)/2D、0E、n22、在下列两种求图的最小生成树的算法中,B 算法适合于求边稀疏的网的最小生成树。

A、PrimB、Kruskal3、下面的叙述中不正确的是 B 。

A、关键活动不按期完成就会影响整个工程的完成时间B、任何一个关键活动提前完成,将使整个工程提前完成C、所有关键活动都提前完成,则整个工程将提前完成D、某些关键活动若提前完成,将使整个工程提前完成4、采用邻接表存储的图,其深度优先遍历类似于二叉树的 B 。

A、中序遍历B、先序遍历C、后序遍历D、按层次遍历5、采用邻接表存储的图,其广度优先遍历类似于二叉树的 A 。

A、按层次遍历B、中序遍历C、后序遍历D、先序遍历6、具有n个顶点的有向图最多有 B 条边。

A、nB、n(n-1)C、n(n+1)D、n27、一个n个顶点的连通无向图,其边的个数至少为 A 。

A、n-1B、nC、n+1D、nlog2n8、下列说法中,正确的有 C 。

A、最小生成树也是哈夫曼树B、最小生成树唯一C、普里姆最小生成树算法时间复杂度为O(n2)D、克鲁斯卡尔最小生成树算法普里姆算法更适合与边稠密的网。

10、判定一个有向图是否存在回路,除了可以利用拓扑排序的方法外,还可以利用 C 。

A、求关键路径的方法B、求最短路径的Dijkstra方法C、深度优先遍历算法D、广度优先遍历算法11、在一个具有n个顶点的有向图中,若所有顶点的出度之和为s,则所有顶点的入度之和为 A 。

A、sB、s-1C、s+1D、n12、在一个无向图中,若两个顶点之间的路径长度为k,则该路径上的顶点数为 B 。

A、kB、k+1C、k+2D、2k13、一个有n个顶点的无向连通图,它所包含的连通分量个数为 B 。

A、0B、1C、nD、n+114、对于一个有向图,若一个顶点的入度为k1、出度k2,则对应邻接表中该顶点单链表中的结点数为 B 。

数据结构第7章复习题

数据结构第7章复习题

ab edcf第七章图一、选择题1.图中有关路径的定义是()。

A.由顶点和相邻顶点序偶构成的边所形成的序列 B.由不同顶点所形成的序列C.由不同边所形成的序列 D.上述定义都不是2.设无向图的顶点个数为n,则该图最多有()条边。

A.n-1 B.n(n-1)/2 C. n(n+1)/2 D.0 E.n23.一个n个顶点的连通无向图,其边的个数至少为()。

A.n-1 B.n C.n+1 D.nlogn;4.n个结点的完全有向图含有边的数目()。

A.n*n B.n(n+1) C.n/2 D.n*(n-l)5.在一个无向图中,所有顶点的度数之和等于所有边数()倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的()倍。

A.1/2 B.2 C.1 D.46.下面结构中最适于表示稀疏无向图的是(),适于表示稀疏有向图的是()。

A.邻接矩阵 B.逆邻接表 C.邻接多重表 D.十字链表 E.邻接表7.下列哪一种图的邻接矩阵是对称矩阵?()A.有向图 B.无向图 C.AOV网 D.AOE网8. 设如左图所示,在下面的5个序列中,符合深度优先遍历的序列有多少?()a eb d fc a c fde b a e df c b a e fd c b aef d b cA.5个 B.4个 C.3个 D.2个9.下面哪一方法可以判断出一个有向图是否有环(回路):A.深度优先遍历 B. 拓扑排序 C. 求最短路径 D. 求关键路径10. 下面是求连通网的最小生成树的prim算法:集合VT,ET分别放顶点和边,初始为( 1 ),下面步骤重复n-1次: a:( 2 );b:( 3 );最后:( 4 )。

(1).A.VT,ET为空 B.VT为所有顶点,ET为空C.VT为网中任意一点,ET为空 D.VT为空,ET为网中所有边(2).A. 选i属于VT,j不属于VT,且(i,j)上的权最小B.选i属于VT,j不属于VT,且(i,j)上的权最大C.选i不属于VT,j不属于VT,且(i,j)上的权最小D.选i不属于VT,j不属于VT,且(i,j)上的权最大(3).A.顶点i加入VT,(i,j)加入ET B. 顶点j加入VT,(i,j)加入ET C. 顶点j加入VT,(i,j)从ET中删去 D.顶点i,j加入VT,(i,j)加入ET(4).A.ET 中为最小生成树 B.不在ET中的边构成最小生成树 C.ET中有n-1条边时为生成树,否则无解 D.ET中无回路时,为生成树,否则无解11. (1). 求从指定源点到其余各顶点的迪杰斯特拉(Dijkstra)最短路径算法中弧上权不能为负的原因是在实际应用中无意义;(2). 利用Dijkstra求每一对不同顶点之间的最短路径的算法时间是O(n3) ;(图用邻接矩阵表示)(3). Floyd求每对不同顶点对的算法中允许弧上的权为负,但不能有权和为负的回路。

图的定义和基本术语图的存储结构图的遍历生成树最短路径

图的定义和基本术语图的存储结构图的遍历生成树最短路径
操作结果: 在图G中增添新顶点v。
DeleteVex(&G, v) //删除顶点 初始条件: 图G存在, v和G中顶点有相同特性 。 操作结果:删除G中顶点v及其相关的弧。
InsertArc(&G, v, w) //插入弧 初始条件:图G存在,v 和w是G中两个顶点。 操作结果:在G中增添弧<v,w>,若G是无向的, 则还增添对称弧<w,v>。
DestroyGraph (&G ) // 销毁 初始条件:图G存在。 操作结果:销毁图G 。
LocateVex(G, u) // 定位 初始条件:图G存在,u 和G中顶点有相同特性 。 操作结果: 若G中存在顶点u ,则返回该顶点在 图中位置 ;否则返回其它信息。
GetVex(G, v)// 求值 初始条件:图G存在,v 是G中某个顶点。 操作结果:返回v的值。
//{有向图,有向网,无向图,无向网}
typedef struct ArcCell {// 弧的定义 VRType adj;//VRType是顶点关系类型。对无权图,
//用1或0表示相邻否;对带权图,则为权值类型。 InfoType *info; // 该弧相关信息的指针 } ArcCell ,
AdjMatrix[MAX_VERTEX_NUM] [MAX_VERTEX_NUM];
V2
V3
0110 0000 0001 10 0 0
//- -图的数组(邻接矩阵)存储表示--
#define INFINITY INT_MAX //最大值∞ #define MAX_VERTEX_NUM 20//最大顶点个数 typedef enum{DG,DN,UDG, UDN }graphkind;
表示,称为无向边;

数据结构第7章图习题

数据结构第7章图习题

第7章图一、单项选择题1.在一个无向图G中,所有顶点的度数之和等于所有边数之和的______倍。

A.l/2 B.1C.2 D.42.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的______倍。

A.l/2 B.1C.2 D.43.一个具有n个顶点的无向图最多包含______条边。

A.n B.n+1C.n-1 D.n(n-1)/24.一个具有n个顶点的无向完全图包含______条边。

A.n(n-l) B.n(n+l)C.n(n-l)/2 D.n(n-l)/25.一个具有n个顶点的有向完全图包含______条边。

A.n(n-1) B.n(n+l)C.n(n-l)/2 D.n(n+l)/26.对于具有n个顶点的图,若采用邻接矩阵表示,则该矩阵的大小为______。

A.nB.n×nC.n-1 D.(n-l)×(n-l)7.无向图的邻接矩阵是一个______。

A.对称矩阵B.零矩阵C.上三角矩阵D.对角矩阵8.对于一个具有n个顶点和e条边的无(有)向图,若采用邻接表表示,则表头向量的大小为______。

A.n B.eC.2n D.2e9.对于一个具有n个顶点和e条边的无(有)向图,若采用邻接表表示,则所有顶点邻接表中的结点总数为______。

A.n B.eC.2n D.2e10.在有向图的邻接表中,每个顶点邻接表链接着该顶点所有______邻接点。

A.入边B.出边C.入边和出边D.不是入边也不是出边11.在有向图的逆邻接表中,每个顶点邻接表链接着该顶点所有______邻接点。

A.入边B.出边C.入边和出边D.不是人边也不是出边12.如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是______。

A.完全图B.连通图C.有回路D.一棵树13.采用邻接表存储的图的深度优先遍历算法类似于二叉树的______算法。

A.先序遍历B.中序遍历C.后序遍历 D.按层遍历14.采用邻接表存储的图的广度优先遍历算法类似于二叉树的______算法。

数据结构第7章-答案

数据结构第7章-答案

一、单选题C01、在一个图中,所有顶点的度数之和等于图的边数的倍。

A)1/2 B)1 C)2 D)4B02、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。

A)1/2 B)1 C)2 D)4B03、有8个结点的无向图最多有条边。

A)14 B)28 C)56 D)112C04、有8个结点的无向连通图最少有条边。

A)5 B)6 C)7 D)8C05、有8个结点的有向完全图有条边。

A)14 B)28 C)56 D)112B06、用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。

A)栈 B)队列 C)树 D)图A07、用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。

A)栈 B)队列 C)树 D)图A08、一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为。

A)O(n) B)O(e) C)O(n+e) D)O(n2)C09、已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是。

A)0 2 4 3 1 5 6 B)0 1 3 6 5 4 2 C)0 1 3 4 2 5 6 D)0 3 6 1 5 4 2B10、已知图的邻接矩阵同上题,根据算法,则从顶点0出发,按广度优先遍历的结点序列是。

A)0 2 4 3 6 5 1 B)0 1 2 3 4 6 5 C)0 4 2 3 1 5 6 D)0 1 3 4 2 5 6D11、已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是。

A)0 1 3 2 B)0 2 3 1 C)0 3 2 1 D)0 1 2 3A12、已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是。

A)0 3 2 1 B)0 1 2 3 C)0 1 3 2 D)0 3 1 2A13、图的深度优先遍历类似于二叉树的。

A)先序遍历 B)中序遍历 C)后序遍历 D)层次遍历D14、图的广度优先遍历类似于二叉树的。

图的定义和术语(4)

图的定义和术语(4)

连 通 图 强 连 通 图
2021/8/17
V0
V1
V2
V3
V4
V0
V1
V2
V3
V0
V1 V4
非 连


V3
V2 V5
V0
V1




V2
V3

7.权 某些图的边具有与它相关的数, 称之为权。这种带权 图叫做网络。
8.子图 设有两个图G=(V,{E})、G1=(V1,{E1}),若 V1 V,E1 E,则称 G1是G的子图。 例:(b)、(c) 是 (a) 的子图
2021/8/17
基本术语:
1.有向图与无向图
在有向图中,顶点对<v, w>是有序的。在无向图中,顶 点对(x, y)是无序的。有向边又可称为弧, <vi,vj>中vi称 为弧尾或初始点,vj称为弧头或终端点。
1
1
3
2
4
3
2
654
5
6
7
无向图
V={1,2,3,4,5,6,7}
VR={(1,3),(3,4),(4,5),(1,2),(2, 6),(2,7),(6,7),(5,6),(1,5),(1,7) } 2021/8/17
adjvex nextarc 4^
3
5^
4
5^
3
^
3^
逆邻接表:有向图中对每个结点建立以Vi为弧头的弧的单链表。
例: a b
cd G1
vexdata firstarc adjvex nextarc
1
a
4^
2
b
1
^
3

邻接表十字链表

邻接表十字链表

(续) for(i=0;i<G->vexnum;i++) printf("%4d",i); printf("\n"); for(i=0;i<G->vexnum;i++) { printf("%6d",i); for(j=0;j<G->vexnum;j++) printf("%4d",G->edges[i][j]);
A B A B
C
D
C
D
图7.6 G2的两棵生成树
例7.1 有n个顶点的连通图最多有多少条边? 最少应多少条边? 解:有n个顶点的连通图最多有n(n-1)/2条 边,也就是一个无向完全图;最少有n-1条 边。
7.2 图的存储结构
图的存储结构除存储图中各个顶点本身 的信息外,同时还要存储顶点之间的所 有关系。图的常用存储结构有邻接矩阵、 邻接表、十字链表。
7.2.1
邻接矩阵
设G=(V,E)是具有n(n>0)个顶点的图,顶 点的顺序依次为(v0,v1,…,vn-1),则 G的邻接矩阵A是n阶方阵,其定义如下: (1) 如果G是无向图,则:
1, 若(vi , v j ) E (G ) A[i ][ j ] 0, 其它
(2) 如果G是有向图,则:
邻接表的头结点和表结点的结构如下:
data
firstarc
adjvex
nextarc
info
头结点
表结点
如图7.8(a)和(b)所示分别为图G1和图G2的 邻接表。
0 1 2 3
A B C D /\ 3 0 /\ /\ 2 1 /\

数据结构(c语言)试题

数据结构(c语言)试题

1、用循环链表作为存储结构的队列就就是循环队列()错误2、线性链表中各个链结点之间的地址不一定要连续。

()正确3、一个任意串就是其自身的子串()正确4、AOV网是个带权有向图()错误5、一组权值,可以唯一构造出一棵哈夫曼树。

()错误6、队列的插入操作是在队尾。

()正确7、邻接表是图的一种链式存储结构()正确8、由权值为3,6,7,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为51()正确9、若某堆栈的输入序列为1,2.3.4,则4,3,1,2不可能就是堆栈的输出序列之一()正确10、在链队列中,即使不设置尾指针也能进行入队操作()错误11、哈夫曼树一定就是完全二叉树()错误12符号p->next出现在表达式中表示p所指的结点的内容()错误12、从源点到终点的最短路径是唯一的()错误13、队列在数据中的存储原则是后进先出()错误14、邻接表只能用于存储有向图,而邻接矩阵则可存储有向图和无向图()错误16.给定一组权值,可以唯一构造出一棵哈夫曼树()错误17、程序越短,程序运行的时间就越少()错误18、线性表的逻辑顺序与物理顺序总就是一致的()错误19、堆栈、队列与数组的逻辑结构都就是线性表结构()正确20、带头节点的单链表head为空的判定条件是head==NULL()错误1、循环队列的特点之一是不会产生()假溢出2、链栈与顺序栈相比,比较明显的优点是()不会出现上溢的情况3、若需要利用形参直接访问实参,则应把形参变量说明为()参数引用4、在一棵深度为h的具有n个元素的二叉排序树中,查找所有元素的最长查找长度为()h5、在单链表中,存储每个结点需要有两个域,一个是数据域,另一个是指针域,它指向该结点的()直接后继6、在查找过程中,若同时还要做增、删工作,这种查找则称为()动态查找7、假定一个顺序队列的队首与队尾指针分别为front与rear,存放该队列的数组长度为N,则判断队空的条件为()Front==rear8、适于对动态查找表进行高效率查找的组织结构就是()二叉排序树9.线性表是()一个有限序列,可以为空10.链表具有的特点是()可随机访问任一元素11、在一棵二叉树中,第5层上的结点数最多为()1612、静态查找表与动态查找表两者的根本差别在于()施加的操作不同13、下列陈述中正确的是()二叉树中最多只有两颗子树,并且有左右之分14、算法在发生非法操作时可以做出处理的特性称为()健壮性15、使用折半查找,线性表必须()以顺序方式存储,且元素已元素已按值排好序16、存储时,结点的地址()连续与否均可17、链表不具有的特点是()随机访问18、一个栈的入栈序列是a , b , c ,d , e,则栈的不可能的输出序列是()d,c,e,a,b19、二维数组A按行顺序存储.其中每个元素占1个存储单元。

《数据结构与算法项目化教程》课件第6章

《数据结构与算法项目化教程》课件第6章

为G=(V, E),V是顶点A的有限集合,E是边的有限集合,即
V={A|A∈某个数据集合}, E={(A, B)|A, B∈V}

E={<A, B> |A, B∈V 且 path(A, B)}
其中,path(A, B)表示从顶点A到B的一条通路。
学习情境6 图
2.图的类型 (1) 无向图。 无向图(undirected graph)中的边没有方向,每条边用两个 顶点的无序对表示,如(A, B)表示连接顶点A和B之间的一条 边,(A, B)和(B, A)表示同一条边。图6-1是一个无向图,用G 表示无向图,其顶点集合V为
V(G)={A,B,C,D,E} E(G)={<A,B>,<A,D>,<A,E>,<B,C>,<C,B>,<C,D>,<D,B> ,<D,E>,<E,A>}
学习情境6 图
图6-2 有向图
学习情境6 图
(3) 自身环的图和多重图。 如图6-3所示,顶点C有一个路径指向自身,这种图称为 带自身环的图;顶点B有两条路径到顶点A,这种图属于多重 图。这些一般不属于数据结构讨论的范畴,本学习情境只讨 论无向图和有向图。 (4) 完全图。 完全图(complete graph)的任一顶点均有路径到其他顶点。 完全图的边数是最大的。无向完全图的边数有n × (n-1)/2,有 向完全图的边数为n × (n-1)。
学习情境6 图
图6-13 邻接表元素
学习情境6 图
图6-14 带权无向图的邻接表表示
学习情境6 图
3.有向图的邻接表表示 以邻接表表示有向图,需要根据边的方向而得到边表, 边表有两种:出边表和入边表。 出边表:第i行单链表存储以顶点vi为起点的所有边<vi, vj>,dest域是该条边的终点vj在顶点表中的下标。 入边表:第i行单链表存储以顶点vi为终点的所有边<vj, vi>,dest域是该条边的起点vj在顶点表中的下标。 有向图的邻接表表示有两种,分别是由出边表构成的邻 接表和由入边表构成的逆邻接表。带权有向图邻接表的出边 表表示如图6-15所示。在有向图的邻接表或逆邻接表中,每 条边只存储一次。

名词解释—邻接表:

名词解释—邻接表:

名词解释—邻接表
邻接表(Adjacency List)是一种常用的图数据结构,用于表示图中的顶点以及它们之间的连接关系。

在计算机科学中,图是由顶点和边组成的数据结构,可以用来表示各种复杂的网络关系,如社交网络、交通网络、电路等。

邻接表是表示图的一种有效方法,尤其适用于稀疏图(即边的数量相对较少的图)。

邻接表的核心思想是将每个顶点与其相邻的顶点列表相关联。

具体实现时,通常使用一个数组或链表来存储每个顶点的相邻顶点。

对于无向图,每个顶点都需要存储其相邻顶点的信息;对于有向图,只需要存储出度(从该顶点出发的边)或入度(指向该顶点的边)的相邻顶点信息。

邻接表的优点包括:
节省空间:邻接表仅存储实际存在的边,对于稀疏图来说非常节省空间。

便于添加和删除顶点:只需要修改相应的顶点列表即可。

便于查询邻接顶点:可以通过直接访问顶点的相邻顶点列表来查询邻接顶点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

===实习报告一“邻接表表示的带权有向图(网)”演示程序===(一)、程序的功能和特点1. 程序功能:建立有向图的带权邻接表,能够对建立的邻接表进行添加顶点,添加边和删除顶点,删除边的操作,并能显示输出邻接表。

2. 程序特点:采用java面向对象语言,对边,顶点和邻接表用类进行封装。

采用链式存储结构。

(二八程序的算法设计算法一:“插入一个顶点”算法:1. 【逻辑结构与存储结构设计】逻辑结构:线性结构。

存储结构:顺序存储与链式存储结合。

邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法。

邻接表表示法类似于树的孩子链表表示法。

就是对于图G中的每个顶点vi,将所有邻接于vi的顶点vj链成一个单链表,这个单链表就称为顶点vi的邻接表,再将所有点的邻接表表头放到数组中,就构成了图的邻接表。

如下图就是一个临界表的存储图。

vertex firstedgeadjvex n ext序号vertex firstedge图的邻接表表示在邻接表表示中有两种结点结构,如图所示。

邻接矩阵表示的结点结构顶点域边指针流程示意图:顶点数据组成的数组顶点数组表的顺序存储: V0 V1— V2—O2.【基本操作设计】文字说明: (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图的邻接表表示5. 【主要成员变量说明】主要成员变量为:static int DefaultSize = 20; 静态缺省数据大小。

private Vertex NodeTable[]; 顶点表数组。

private int NumVertices ; 当前顶点个数。

private int MaxVertices ; 最大顶点个数。

private int NumEdge;s 当前边数。

6. 【主要成员方法说明】public GraphAdj ( int vn, char v[], int en, int e[][], double w[]) :为定义的构造函数,建立图的邻接表。

public boolean GraphEmpty ( ) :判断图是否为空。

public boolean GraphFull ( ) :判断图是否为满。

public char GetValue ( int i ) :按顶点序号返回顶点数据。

public int NumberOfVertices ( ) :返回图的顶点数。

public int NumberOfEdges ( ) :返回图的边数。

public boolean InsertVertex ( char vertex ) :插入一个顶点。

public boolean RemoveVertex ( int v ) :删除一个顶点。

public boolean InsertEdge ( int v1, int v2, double weight ) :插入一条边。

public boolean RemoveEdge ( int v1, int v2 ) :删除一条边。

public void display() :显示邻接表。

4. 【高级语言代码】// 定义邻接表类class GraphAdj {static int DefaultSize = 20;private Vertex NodeTable[]; // 顶点表private int NumVertices ; // 当前顶点个数private int MaxVertices ; // 最大顶点个数private int NumEdge;s // 当前边数// 构造函建立图的邻接表public GraphAdj ( int vn, char v[], int en,int e[][], double w[]){// 形参:顶点数顶点数组边数边结点数组权数组int i;NumVertices =0; // 当前顶点数NumEdge=s0; // 当前边数// 确定顶点表空间MaxVertices =vn>DefaultSize ?vn: DefaultSize ;NodeTable = // 创建顶点表newVertex[ MaxVertices ];// 输入顶点for ( i = 0; i < vn; i++)InsertVertex ( v[i]);//输入边。

e为en行2列的数组e[en][2]for ( i = 0; i < en; i++)In sertEdge ( e[i][0], e[i][1], w[i]);}public boolean GraphEmpty ( ){ // 图空否?retur n NumVertices == 0;}public boolean GraphFull ( ){ // 图满否?return NumVertices == MaxVertices ;}//按顶点序号返回顶点数据public char GetValue ( int i ){return i >= 0 && i < NumVertices ? NodeTable[i]. data :'';}//返回图的顶点数public int NumberOfVertices ( ){return NumVertices;}//返回图的边数public int NumberOfEdges ( ){retur n NumEdges}//插入一个顶点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 ;}//删除一个顶点public boolean RemoveVertex ( int v ){//当前顶点数NumVerticesif (v>= NumVertices ||v<0)return false ;//删除边链表NodeTable[v]. adj =null ;for (int k=0;k< NumVertices ;k++){//如果有指向V的边,则需删除Edge p=NodeTable[k]. adj ;Edge q=p;while (p!= null ) {if (p. dest ==v){if (q==p) //删第一个边结点NodeTable[k]. adj =p. link ;else //删后面的边结点q. link =p. link ;} q=p;p=p. link ;}}//从顶点表中删除for (int i=v+1;i< NumVertices ;i++)NodeTable[i-1]= NodeTable[i];NumVertices--;for (int j=0;j< NumVertices-1;j++){//如果有以V以后的点为终点的点,贝UEdge p=NodeTable[j]. adj ;//邻接表中的dest属性应减1if (p!= null ){//防止在添加顶点之后由于NumVertices加1//而导致空指针异常if (p. dest >v){p. dest =p. dest-1;}while (p. link !=null ){ p=p. link ;if (p. dest >v){p. dest =p. dest-1;}}}} //结束循环for jreturn true ;}//插入一条边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[v 1 ]. adj ;// 插入第一个边结点if ( p== null ) NodeTable[v1]. adj =E;else { // 插入其它边结点while (p. link != null ) p=p. link ;p. link =E;}NumEdge+s+; // 当前顶点数return true ;}// 删除一条边public boolean RemoveEdge ( int v1, int v2 ){if (v 1 >= NumVertices ||v1<0)return false ;if (v2>= NumVertices ||v2<0)return false ;//从第v1条单链表向后查找Edge p=NodeTable[v 1 ]. adj ;Edge q=p;while (p!= null ) {if (p. dest ==v2){if (q==p) // 删第一个边结点NodeTable[v1]. adj =p. link ;else // 删后面的边结点q. link =p. link ; return true ;}q=p;p=p. link ;}return false ;}// 显示邻接表public void display(){Edge p;System. out .println( "邻接表");for ( int i = 0; i < NumVertices ; i++ ) {System. out .println( NodeTable[i]. data ); // 顶点p = NodeTable[i]. adj ; // 打印第i 条链表while (p!= null ) { System.out .print(p. dest +" " +p. cost +" " ); p=p. link ;}System. out .println();}// 主函数public static void main(String args[]){// 准备有向图(网)数据char c[]={ 'A' , 'B' ,'C' ,'D' , 'E' , 'F' }; // 顶点int e[][]={ // 弧{0,1},{0,3},{1,2},{2,3},{4,5}, {1,3},{2,4},{3,5},{4,3},{2,5} };double w[]={2.3,3.6,6.5,2.5,1.7,0.8,7.2,9.1,5.2,1.3}; // 权// 实参:顶点数顶点数组边数边结点数组权数组GraphAdjG=newGraphAdj(6,c,10,e,w); // 邻接矩阵G.display( );// 删除顶点//G.RemoveVertex(2);//G.display( );// 删除一条边//G.RemoveEdge(1,2);//G.display( );}} // 邻接表类结束(四)、程序的输入输出和运行结果截屏程序运行结果截屏:。

相关文档
最新文档