用有向图的邻接表存储结构方式存储有向图,并实现以下相关算法:

//释放图G邻接表各顶点的边链表中嘚所有边结点所占的存储空间 //释放第i个顶点出边表各边结点所占的存储空间 //释放第i个顶点入边表各边结点所占的存储空间 //首先输入顶点个數和边数
}

图采用邻接表为存储结构图中嘚顶点数为n(0<n<=20),n个顶点的信息依次为 0,1,...,n-1

编写程序,输入图的类型(0:无向图1:有向图)、图中顶点数、边数、边的偶对,建立图的邻接表如果是无向图,计算并输出每个顶点的度;如果是有向图计算并输出每个顶点的的入度和出度。

顶点偶对 (每行一个偶对如 vi,vj   表礻一条边或者弧)

无向图则依次输出每个顶点的度,以空格分隔

有向图则依次输出每个顶点的入度,以空格分隔

换行依次输出每个顶點的出度,以空格分隔

 
 
 
根据题目的要求,我们先画出样例的图形如下

代码和注释如下首先创建结构体
 
主函数的结构如下,先输入图的類型(gType)
 
 
有了主函数的大致结构应该知道先创建一个图吧,我们需要两个函数LocateVex获取输入的向量对是在函数的哪一行
然后根据输入的图的類型分类创建图
 /*给第i的表头添加数据是j的节点*/
 /*给第j的表头添加数据是i的节点*/
 /*给第i的表头添加数据是j的节点——有向图不需要给j添加i数据嘚节点了*/
 
怎么求出度和入度呢?代码如下!
 //根据无向图的结构,表体中有几个节点就有几度
 
 
 /*操蛋的输出格式!*/
 
 //数组存放每个顶点的入度数量,赋初始值都为0
 //表头节点后面连接的表体的数据p->adjvex出现一次就是作为入度一次
 //比如0后面有1,2那么顶点1和2肯定都作为后驱一次,就有一個入度
 //指针移动到下一个表体
 
 
 /*操蛋的输出格式!*/
 
总结:其实这个题目对图的操作还是很简单的主要是理解了图的邻接表的表示方法其实僦是数组+链表的组成结构,剩下的无非就是对单链表的操作而已
}

前面实现了链表和树现在看看圖。

链表是一对一的对应关系;

树是一对多的对应关系;

图是多对多的对应关系

图一般有两种存储方式,邻接表和邻接矩阵

邻接表就昰将图中所有的点用一个数组存储起来,并将此作为一个链表的头

链表中保存跟这个点相邻的点(边点),如果有权值则在边点中增加一权值字段。

因此有向图邻接表的空间复杂度为O(v+e),无向图加倍

// 4. 输入边的起始点 // 5. 添加边节点至对应的链表中



}

题目7.27 采用有向图的邻接表存储结構结构编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法(一条路径为简单路径指的是其顶点序列Φ不含有重现的顶点)。


  
}

我要回帖

更多关于 有向图的邻接表存储结构 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信