邻接矩阵用二维数组即可存取,比较简单,但除完全图外,一般的图不是任意两个顶点都相邻接,因此邻接矩阵也有很多零元素,特别是当n 较大而边数相对完全图的边(n-1)又少得多时,邻接矩阵仍是很稀疏,这样浪费存储空间。 邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法,类似于树的孩子链表表示法。由于它只考虑非零元素,因而节省了零元素所占的存储空间。它对于无向图和有向图都适用。 邻接表示法就是对于图G中的每个顶点放到一个数组中,数组的每个元素存放一个结点并指向一个单链表的指针。链表中存储着与该顶点相邻接的顶点所在的数组元素的下标。在邻接表表示中有两种编程结点结构,如图6-9所示。(a) 表头结点 (b) 边表结点图6-9邻接矩阵表示的结点结构 在邻接表中,对图中每个顶点建立一个单链表。单链表有一个表头结点,表头结点的结构为图6-9(a)所示。其中,vertex域存放图中某个顶点vi 的信息,link为指针,指向对应单链表中的结点。 单链表中的结点称为边表结点,边表结点结构如图6-9(b)所示。其中,adjvex域存放与顶点vi相邻接的顶点在二维数组中的序号,next域为指针,指向与顶点vi相邻接的下一个顶点的边表结点。下图6-10给出无向图6-7对应的邻接表表示。图6-10图的邻接表表示邻接表表示的形式描述如下:结构6-2 邻接表的结构C语言代码
#define maxvernum 100 //最大顶点数为100
typedef struct node //边表结点
{
int adjvex; //邻接点域
struct node* next; //指向下一个邻接点的指针域
}Edgenode;
typedef struct vnode //表头结点
{
Vertextype vertex; //顶点域
Edgenode*link; //边表头指针
} Vexnode;
typedef Vexnode adjlist[maxvernum];//adjlist是邻接表类型
typedef struct
{
adjlist adjlist; //邻接表
int n,e; //顶点数和边数
} Adjgraph; // Adjgraph是以邻接表方式存储的图类型
建立一个有向图的邻接表存储的算法如下:
算法6-2 建立邻接表的算法
void greatealgraph(Adjgraph *g) //建立有向图的邻接表存储
{
int i,j,k;
Edgenode * s;
printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n");
scanf("%d,%d",&(g->n),&(g->e)); //读入顶点数和边数
printf("请输入顶点信息(输入格式为:顶点号<CR>):\n");
for (i=0;i<g->n;i++) //建立有n个顶点的顶点表
{
scanf("\n%c",&(g->adjlist[i].vertex));//读入顶点信息 g->adjlist[i].link=NULL; //顶点的边表头指针设为空
}
printf("请输入边的信息(输入格式为:i,j):\n");
for (k=0;k<g->e;k++) //建立边表
{
scanf("\n%d,%d",&i,&j); //读入边<vi,vj>的顶点对应序号
s=(Edgenode*)malloc(sizeof(Edgenode));//生成新边表结点s
s->adjvex=j; //邻接点序号为j
//将新边表结点s插入到顶点vi的边表头部
s->next=g->adjlist[i].link;
g->adjlist[i].link=s;
}
}
分享到:
相关推荐
该资源浅显易懂的讲述了有向图邻接链表的深度优先遍历,对于初学者是非常有帮助的
有向图邻接表基本代码
数据结构无向图DFS遍历,通过DFS来实现无向图的邻接表实现
这些代码大约三百行左右 包括了邻接矩阵图邻接表图的结构和创建,还有两种图的深度和广度优先搜索和prim最小生成树算法,本人花了一周左右时间复习了这些东西,全部手打,绝对区别于网上的一些乱代码,无错并有大量...
试基于图的深度优先搜索策略编写一程序,判别以邻接表存储的有向图中是否存在有顶点Vi到Vj顶点的路径(i!=j)。
用邻接表实现图的各种操作,功能强大,代码简单
建立有向图的邻接表更简单,每当读人一个顶点对序号 ,j> 时,仅需生成一个邻接序号为j的边表结点,将其插入到vj的出边表头部即可。 同时没个节点带权访问。 邻接表的形式说明 typedef struct node{//边表结点 ...
键盘输入数据,建立一个有向图的邻接表。(2)输出该邻接表。(3)在有向图的邻接表的基础上计算各顶点的度,并输出。(4)采用邻接表存储实现无向图的广度优先遍历。(5)采用邻接表存储实现无向图的深度优先非递归...
用邻接表实现无向图的存储结构,并进行深度优先搜索及广度优先搜索。
邻接表深度遍历和广度遍历 邻接表深度遍历和广度遍历 邻接表深度遍历和广度遍历 邻接表深度遍历和广度遍历
用Java描述的图,以邻接表存储,包含常用算法
图邻接矩阵的建立,邻接表的建立 图的深度遍历。
无向图的邻接表存储及输出无向图的邻接表存储及输出无向图的邻接表存储及输出
无向图的邻接表表示
图的邻接表表示的克鲁斯卡尔算法 迪杰斯特拉算法 普里姆算法 c++实现 codeblocks编译通过
用图的邻接表求最短路径,用邻接表 邻接表 邻接表
通过输入顶点数和边数,自动构造用邻接表表示的图,并显示。
数据结构 c++ 图的最短路径问题 (邻接表) 数据结构 c++ 图的最短路径问题 (邻接表)
领会图的两种主要存储结构、图基本运算算法和两种遍历算法设计内容:编写一个程序,设计带权图的邻接矩阵与邻接表的创建和输出运算,并在此基础上设计一个主程序完成如下功能:(1)建立如图所示的有向图G的邻接矩阵...
存储结构:邻接表; 实现功能:广度遍历; 为发布的博客的代码实现