#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 20
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)
{
printf("请输入顶点数和边数,如(2,3):\n");
scanf("%d,%d",&G->numVertexes,&G->numEdges);
for (int i=0; i<G->numVertexes; ++i) {
printf("请输入顶点\n");
scanf("%c",&G->adjList[i].data);///
getchar();//必须要清除缓冲区
G->adjList[i].firstedge=NULL;
}
int i,j;
EdgeNode *e;
for (int k=0; k<G->numEdges; ++k) {
printf("输入边(vi,vj)上的顶点序号,如(0,1):\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[j].firstedge;
G->adjList[j].firstedge=e;
}
}
int main()
{
GraphAdjList * G;//G是一个指针可以指向结构体变量
CreateALGraph(G);
for (int i=0; i<G->numVertexes; ++i) {
printf("%d->",i);//从0开始遍历顶点
while (G->adjList[i].firstedge!=NULL) {
printf("%d->",G->adjList[i].firstedge->adjvex);
G->adjList[i].firstedge=G->adjList[i].firstedge->next;
}
printf("\n");
}
}
由于G是一个指针所以是用->符号来提取结构体变量中的元素
G->adjList[i]就表示这个数组adjList[i]本身,而其本身又是一个结构体数组,相当于对指针的解引用,所以可以用’.’符号取结构体中的元素
再就是在输入字符型变量的时候要注意使用getchar()清除缓冲区的回车键,好像空格键不用清除都可以