邻接矩阵
#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;
}
}