数据结构----图(邻接表用法)

1、定义图的结构:

 1 #define NUM_MAX 6
 2 typedef struct ArcNode{
 3     int adjvex;
 4     struct ArcNode * nextArc;
 5 }ArcNode; //定义弧结点结构体
 6 typedef struct VertexNode{
 7     int data;
 8     ArcNode * firstArc;
 9 }VertexNode;//定义顶点结构体
10 typedef struct {
11     VertexNode * AdjList[NUM_MAX];
12     int vertexNum,edgeNum;
13     int graphType;
14 }LinkGraph;//定义图

2、定义创建图的邻接表的函数

 1 void createLink(LinkGraph *lg){
 2     int start,end;
 3     ArcNode *s;
 4     for(int i=1;i<=lg->vertexNum;i++){
 5         (lg->AdjList[i])=(VertexNode *)malloc(sizeof(VertexNode));//如果这里没有开辟内存空间,则lg->AdjList[i]是空的。这是指针变量与实体变量的区别
 6         (lg->AdjList[i])->data=i;
 7         (lg->AdjList[i])->firstArc=NULL;
 8     }
 9     for(int i=1;i<=lg->edgeNum;i++){
10         printf("Please input two vertexes of the %dth edge\n",i);
11         scanf("%d%d",&start,&end);
12         s=(ArcNode *)malloc(sizeof(ArcNode));
13         s->adjvex=end;
14         s->nextArc=lg->AdjList[start]->firstArc;
15         lg->AdjList[start]->firstArc=s;
16     }
17 }

3、定义输出邻接表函数

 1 void outPut(LinkGraph *lg){
 2     ArcNode *s;
 3     for(int i=1;i<=lg->vertexNum;i++){
 4         printf("the vertex %d:",i);
 5         s=lg->AdjList[i]->firstArc;
 6         while(s){
 7             printf(" --> %d",s->adjvex);
 8             s=s->nextArc;
 9         }
10         printf("\n");
11     }
12
13 }

4、主函数:

 1 int main(){
 2     LinkGraph *lg;
 3     lg=(LinkGraph*)malloc(sizeof(LinkGraph));
 4     printf("Please input the vertexNum and edgeNum:");
 5     scanf("%d%d",&lg->vertexNum,&lg->edgeNum);
 6     createLink(lg);
 7     printf("Output the LinkGraph:\n");
 8     outPut(lg);
 9     free(lg);
10     getch();
11     return 0;
12 }

时间: 2024-10-09 20:16:45

数据结构----图(邻接表用法)的相关文章

【算法与数据结构】图 -- 邻接表

/************************************************************************ 边(弧)结点 -------------------------- |adjvex | info | nextarc | -------------------------- adjvex:邻接点域,该点在图中的位置 info :相关信息,比如可以保存从某顶点到该点的权值 nextac:指向下一个与该点有相同邻接点的顶点 顶点结点 ---------

数据结构(11) -- 邻接表存储图的DFS和BFS

/////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS /////////////////////////////////////////////////////////////// #include <iostream> #include <stdlib.h> #include <queue> using namespace std; //图的邻接表表示法

【数据结构】邻接表的广度与深度遍历

邻接表:数组和链表相结合的方法.图中顶点一般用一个一维数组存储,也可以用单链表存储,每个顶点的邻接点构成一个线性表,一般为单链表. 无向图: 有向图: 代码: #include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #defi

一步两步学算法之图邻接表实现

图的邻接表实现 这种结构创建邻接表时添加节点较为绕 建议断点调试下看看 邻接表和邻接矩阵相比 邻接表节省空间但是很难判断两个节点之间是否有边  此种结构要在稀疏图下才划算 下面是代码 1 #define VERTEX_MAX 20 2 #include "stdio.h" 3 #include "malloc.h" 4 typedef struct edgeNode 5 { 6 int Vertex; //顶点序号 7 int weight; 8 struct ed

数据结构----邻接矩阵-邻接表

要表示一个图G=(V,E),有两种标准的表示方法,即邻接表和邻接矩阵.这两种表示法既可用于有向图,也可用于无向图.通常采用邻接表表示法,因为用这种方法表示稀疏图(图中边数远小于点个数)比较紧凑.但当遇到稠密图(|E|接近于|V|^2)或必须很快判别两个给定顶点手否存在连接边时,通常采用邻接矩阵表示法,例如求最短路径算法中,就采用邻接矩阵表示. #include<stdio.h> #include<string.h> #include <stdlib.h> #define

数据结构----图(邻接矩阵用法)

1.定义图的链接矩阵: 1 #define VERTEX_MAX 6 2 #define MAXVALUE 32767 3 typedef struct{ 4 int vertex[VERTEX_MAX]; 5 int edges[VERTEX_MAX][VERTEX_MAX]; 6 int vertexNum,edgesNum; 7 int grapType; 8 }MatrixGraph; 2.定义函数createGraph,创建图的邻接矩阵: 1 void createGraph(Matr

图-邻接表

原文地址:https://www.cnblogs.com/jundima/p/10182324.html

基于邻接表的图建立(有向图+无向图)

图的表示(建立)有两种方法: ①邻接矩阵:A(i,j)=1表示i,j存在一条边,空间复杂度O(n^2),稠密图 ②邻接表:只记录存在的边,Vector+List的数据结构,稀疏图 邻接矩阵的图建立这里不做赘述,接下来我们看一下邻接表的图建立: <1>有向图 注意理解头插入节点的过程 int n,m;//n表示城镇个数,m表示道路条数</span> struct LinkNode//列表节点 { int vex; //邻接的结点在数组中的编号 LinkNode* next; }; s

邻接表 几篇不错的解说

假设你还不知道邻接表的概念和作用etc: 请猛戳:http://baike.baidu.com/view/549594.htm?fr=aladdin struct Edge { int v; int next; }e[maxm]; memset(head,-1;sizeof(head); int c = 0; void add(int x, int y) { e[c].v = y; e[c].next = head[x]; head[x] = c++; } 图的邻接表存储 c实现:http://