C语言 数据结构 图的邻接表存储 基本操作(附输入样例和讲解)

代码参照了严蔚敏、吴伟民编写的数据结构(C语言版)。

所有代码采用C语言编写。讲解请查看注释。

头文件及宏定义

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_VERTEX_NUM 20//最大顶点个数

#define OK 1
#define Fail 0 
#define False 0
#define True 1
#define Error 0;

typedef定义数据类型和结构体

typedef enum{
   DG,DN,UDG,UDN}GraphKind;//{有向图,有向网,无向图,无向网} 
typedef int Status;
typedef char InfoType;
typedef char VertexType;

typedef struct ArcNode{
   //表结点 
	int adjvex;//该弧所指向的顶点的位置 
	struct ArcNode *nextarc;//指向下一条弧的指针 
	InfoType *info;//该弧相关信息的指针 
}ArcNode; 

typedef struct VNode{
   //头结点 
	VertexType data;//顶点信息 
	ArcNode *firstarc;//指向第一条依附该顶点的弧的指针 
}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct{
   
	AdjList vertices;//存储顶点的数组 
	int vexnum,arcnum;//图的顶点数和弧数 
	int kind;//图的种类标志 
}ALGraph;

LocateVex

Status LocateVex(ALGraph G, VertexType u){
   //找出顶点u在顶点数组vertices中的次序 
	int i=0; 
	for (i=0; i<G.vexnum; i++){
   
		if (G.vertices[i].data==u)
			return i;
	}
	return False;//未匹配到 
}

CreateGraph

Status CreateGraph(ALGraph *G){
   //构造有向无权图
	G->kind=DG;//有向图 
	int i=0,j=0,k=0;
	printf("请输入图的顶点个数和弧数\n");
	fflush(stdin);
	scanf("%d",&G->vexnum);
	fflush(stdin);
	scanf("%d",&G->arcnum);
	
	printf("请输入所有顶点\n");
	for(i=0;i<G->vexnum;i++){
   
	    fflush(stdin);//清空输入缓存区,否则会将上次输入结束后的回车符当成一个字符存入。下面同理 
	    scanf("%c",&G->vertices[i].data);//将所有的顶点读入数组vexs中进行存储 
	    G->vertices[i].firstarc=NULL;//所有头结点的弧指针域为空 
	}
	char v1=0,v2=0;
	printf("请输入弧尾和弧头,弧尾指向弧头\n");
	for(k=0;k<G->arcnum;k++){
   //对矩阵进行赋值 

	    fflush</
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值