图这一章我一直觉得自己学的不是很好。。。这次就只放代码,不敢多说什么了。
typedef char VertexType; //顶点类型应由用户定义typedef int EdgeType; //边上的权值类型应由用户定义#define MAXVEX 100typedef 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 CreatALGraph(GraphAdjList *G){int i, j, k;EdgeNode *e;printf("请输入顶点数和边数:");scanf("%d, %d", &G->numVertexes, &G->numEdges); //输入顶点数和边数for (i = 0; i < G->numVertexes; i++){ //读入顶点信息,建立顶点表scanf("%c", &G->adjList[i].data); //输入顶点信息G->adjList[i].firstedge = NULL; //将边表置为空表}for (k = 0; k < G->numEdges; k++){ //建立边表printf("输入(vi, vj)上的顶点序号:\n");scanf("%d, %d", &i, &j); //输入(vi, vj)上的顶点序号e = (EdgeNode *)malloc(sizeof(EdgeNode)); //向内存申请空间e->adjvex = j; //邻接序号为je->next = G->adjList[i].firstedge; //将e指针指向当前顶点所指向的结点G->adjList[i].firstedge = e; //将当前顶点的指针指向ee = (EdgeNode *)malloc(sizeof(EdgeNode)); //向内存申请空间,生成边表结点e->adjvex = i; //邻接序号为ie->next = G->adjList[j].firstedge; //将e指针指向当前顶点指向的结点G->adjList[j].firstedge = e; //将当前顶点的指针指向e}}
