2.邻接表
邻接表由表头顶点和边表节点组成,因此要先定义头顶点和边表节点的数据结构 。
typedef char VertexType;//边表节点typedef struct _EdgeNode{int adjvex;//边表顶点号,用于存放于头表顶点邻接的顶点Vj的序号jint weight;//权值struct _EdgeNode * next; //指向下一个边表节点}EdgeNode;typedef struct _VNode//头顶点信息{VertexType data;//存放顶点的信息 。。。EdgeNode *firstEdge;}VNode;
定义好头节点和边节点之后,就可以定义邻接表数据结构了,同邻接矩阵一样,也有2种方法:
#define MAXVERTEXNUM 100typedefstruct AdjList{VNode adjList[MAXVERTEXNUM];int NumVertex;int Numedges;}LGraph;//用指针来实现 typedefstruct AdjList_P{VNode *adjList;//需要分配内存int NumVertex;int Numedges;}LPGraph;
使用第一种数据类型构建一张图:
void CreateGraph_AL(LGraph *G){int i=0;int s,t,w;VertexType data;cout<<"请输入顶点数和边数:";cin>>G->NumVertex>>G->Numedges;//初始化表头for(i=0;i
文章插图
使用第二种数据类型构建一张图:需要为头顶点指针分配内存
【图论系列:图的表示】void CreateGraph_ALP(LPGraph *G){int i=0;int s,t,w;VertexType data;cout<<"请输入顶点数和边数:";cin>>G->NumVertex>>G->Numedges;G->adjList=(VNode *)malloc(G->NumVertex*sizeof(VNode));if(G->adjList==NULL){printf("内存分配失败");return;}//1.初始化for(i=0;i
运行效果:
文章插图
三、图的两种表示方法比较
(1)找顶点的所有邻接顶点
邻接矩阵:可以判断对应顶点序号的一维数组的值,例如:A[1][...]=? 若=0,邻接;=1邻接
- 一张图点开是长图怎么制作,微信长图怎么制作?
- 一张图分辨风寒vs风热,怎样区分风寒,风热感冒?
- 20 时序图图形含义
- vue中图片和视频加载不出
- 绿色农业和生态农业的区别
- 一开5孔开关接线实物图,一开5孔开关接线实物图
- 一室一厅小户型装修,一室一厅小户型装修效果图 一室一厅一卫装修
- 一室一厅的廉租房图片,...想申请公租房一室一厅的
- 一幅春天简笔画图片,春天像一幅美丽的图画英文
- 南京一教授还原三国古地图发现关羽是路盲?