数据结构图笔记自用

邻接矩阵

#define MAXVEX 100           //最大顶点数为100
typedef char VertexType;     //顶点类型设为字符型
typedef int EdgeType;     //边的权值设为整型
typedef struct 
{
	VertexType vexs[MAXVEX];//顶点表
	EdgeType edges[MAXVEX][MAXVEX];//邻接矩阵
	int n, e;//顶点数和边数
}Mgraph;//Mgraph是以邻接矩阵存储的图的类型
void CreateMgraph(Mgraph* G)
{
	int i, j, k, w;
	char ch;
	printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n");
	scanf_s("%d,%d", &(G->n), &(G->e));//输入顶点数和边数
	printf("请输入顶点信息(输入格式为:顶点号<CR>):\n");
	for (i = 0; i < G->n; i++)
		scanf_s("\n%c", &(G->vexs[i]));//输入顶点信息,建立顶点表
	for (i = 0; i < G->n; i++)
		for (j = 0; j < G->n; j++)
			G->edges[i][j] = 0;//初始化邻接矩阵
	printf("请输入每条边对应的两个顶点的序号(输入格式为:i,j):\n");
	for (k = 0; k < G->e; k++)
	{
		scanf_s("\n%d,%d", &i, &j);//输入e条边,建立邻接矩阵
		G->edges[i][j] = 1;//无向图的邻接矩阵存储
	}
}

无向图邻接表

#define MAXVEX 100           //最大顶点数为100
typedef char VertexType;
typedef struct enode
{
	int adjvex;         //邻接点域
	struct node* next;   //指向下一个邻接点的指针域
}edgenode;             //边表节点
typedef struct vnode
{
	VertexType vertex; //顶点域
	edgenode* firstedge; //边表头指针
}vertexnode;   //顶点表指针
typedef vertexnode AdjList[MAXVEX];//AdjList时邻接表类型
typedef struct
{
	AdjList adjlist;  //邻接表
	int n, e;//顶点数和边数
}ALGraph;//ALGraph是以邻接表方式存储的图类型

有向图邻接表

#define MAXVEX 100           //最大顶点数为100
typedef char VertexType;
typedef struct enode
{
	int adjvex;         //邻接点域
	struct node* next;   //指向下一个邻接点的指针域
}edgenode;             //边表节点
typedef struct vnode
{
	VertexType vertex; //顶点域
	edgenode* firstedge; //边表头指针
}vertexnode;   //顶点表指针
typedef vertexnode AdjList[MAXVEX];//AdjList时邻接表类型
typedef struct
{
	AdjList adjlist;  //邻接表
	int n, e;//顶点数和边数
}ALGraph;//ALGraph是以邻接表方式存储的图类型
void CreateALGraph(ALGraph* G)
{
	int i, j, k;
	edgenode* s;
	printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n");
	scanf_s("%d,%d", &(G->n), &(G->e));//输入顶点数和边数
	printf("请输入顶点信息(输入格式为:顶点号<CR>):\n");
	for (i = 0; i < G->n; i++)//建立有n个顶点的顶点表
	{
		scanf_s("\n%c", &(G->adjlist[i].vertex));//读入顶点信息
		G->adjlist[i].firstedge = NULL;//顶点的边表头指针设为空
	}
	printf("请输入边的信息(输入格式为:i,j):\n");
	for (k = 0; k < G->e; k++)//建立边表
	{
		scanf_s("\n%d,%d", &i, &j);//读入边<vi,vj>的顶点对应序号
		s = (edgenode*)malloc(sizeof(edgenode));//生成新边表节点s
		s->adjvex = j;//邻接点序号为j
		s->next = G->adjlist[i].firstedge;//将新边表节点s插入到顶点vi的边表头部
		G->adjlist[i].firstedge = s;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值