代码参照了严蔚敏、吴伟民编写的数据结构(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</