图的存储结构——邻接表的建立
来源:互联网 发布:绘画软件 编辑:程序博客网 时间:2024/05/19 02:40
邻接表(无向图)
- 图中顶点用一个一维数组存储,当然,顶点也可以用单链表来存储,不过数组可以较容易地读取顶点信息,更加方便。
- 图中每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以我们选择用单链表来存储。
邻接表(有向图)
把顶点当弧尾建立的邻接表
有向图的逆邻接表:
邻接表(网)
对于带权值的网图,可以在边表结点定义中再增加一个数据域来存储权值即可:代码:
#include <stdio.h>#include <stdlib.h>#define MAXVEX 100//结点定义typedef char VertexType;typedef int EdgeType;//边表结点typedef struct EdgeNode {int adjvex;//邻接点域,存储该顶点对应的下标EdgeType weight;//用于存储权值,对于非网图可以不需要struct EdgeNode *next;//链域,指向下一个邻接点}EdgeNode;//顶点表结点typedef struct VertexNode{VertexType data; //顶点域,存储顶点信息EdgeNode *firstedge; //边表头指针}VertexNode,AdjList[MAXVEX];typedef struct{AdjList adjList;int numVertexes,numEdges;//图中当前顶点数和边数}GraphAdjList;//建立图的邻接表结构void CreateALGraph(GraphAdjList *G){int i,j,k;EdgeNode *e;//输入顶点和边数printf("输入顶点数和边数:\n");scanf("%d,%d",&G->numVertexes,&G->numEdges);getchar();//输入顶点信息,建立顶点表printf("输入顶点字符:\n");for(i=0;i<G->numVertexes;i++){scanf("%c",&G->adjList[i].data);G->adjList[i].firstedge=NULL;}//建立边表for(k=0;k<G->numEdges;k++){printf("输入边(vi,vj)上的顶点序号:\n");scanf("%d,%d",&i,&j);//(单链表中的头插法)e = (EdgeNode*)malloc(sizeof(EdgeNode));//向内存申请空间//生成边表结点e->adjvex=j;e->next=G->adjList[i].firstedge;G->adjList[i].firstedge=e;e = (EdgeNode*)malloc(sizeof(EdgeNode));//向内存申请空间//生成边表结点e->adjvex=i;e->next=G->adjList[i].firstedge;G->adjList[i].firstedge=e;}}int main(void){ GraphAdjList G; CreateALGraph(&G);return 0;}
0 0
- 图的存储结构——邻接表的建立
- 建立图的存储结构 :邻接表 和 邻接矩阵
- 图的存储结构——邻接表
- 图的存储结构——邻接表
- 图的存储结构——邻接链表
- 图的存储结构——邻接表
- 图的存储结构—邻接矩阵、邻接表
- 邻接表存储图的建立
- 图的邻接表存储结构
- 图的邻接表存储结构
- 图的存储结构(邻接表)
- 图的常用存储结构----邻接表
- 图的邻接表存储结构
- 图的邻接表存储结构
- 图的存储结构 --- 邻接表
- 图的常用存储结构----邻接表
- 图的存储结构-邻接表
- 邻接表 图的存储结构
- Lua学习笔记之模块
- 实时截屏 转为 openCV 格式处理
- 【从零学习经典算法系列】分治与递归1——递归表达式与解法初步
- 【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用
- Python中的条件选择和循环语句
- 图的存储结构——邻接表的建立
- 【LeetCode with Python】 Integer to Roman
- repo服务器 搭建
- 变量的功能
- [转]POJ WA/RE指南
- Insertion Sort List
- OCP 1Z0 053 92
- ubuntu修改主机名
- 获取程序运行时间