邻接矩阵的基本运算代码
#include<stdio.h>#include<stdlib.h>
typedef int ElemType;
#define MAXV 20
#define INF 32767
typedef struct//顶点
{
char no;
ElemType data;
}VertexType;
typedef struct//邻接矩阵数组
{
int edges; //邻接矩阵数组
int n,e; //顶点数,边数
VertexType vexs; //顶点信息
}MatGraph;
//创建图的运算算法
void CreateAdj(MatGraph *G)//创建图的邻接矩阵
{
G=(MatGraph *)malloc(sizeof(MatGraph));
int i=0,j=0;
printf("请输入邻接矩阵的顶点数和边数:\n");
scanf("%d",&G->n);
scanf("%d",&G->e);
printf("请输入邻接矩阵的顶点信息:\n");
while(i<G->n)
{
scanf("%c",&G->vexs.no);
i++;
getchar();
}
i=0;
printf("请输入邻接矩阵:\n");
while(i<G->n)
{
while(j<G->n)
{
scanf("%d",&G->edges);
j++;
}
j=0;
i++;
}
}
//输出图的运算算法
void DispAdj(MatGraph *G)
{
int i=0,j=0;
printf("邻接矩阵:\n");
while(i<G->n)
{
while(j<G->n)
{
printf("%3d",G->edges);
j++;
}
printf("\n");
j=0;
i++;
}
}
//销毁图的运算算法
void DestroyAdj(MatGraph *G)
{
free(G);
}
void main()
{
MatGraph *G;
CreateAdj(G);
DispAdj(G);
}
在调试时G->n,G->e 出现CXX0030:Error:expression cannot be evpraluated 的提示 void main()
{
MatGraph *G;
CreateAdj(G);
DispAdj(G);
}
把这里的MatGraph *G;换成MatGraph *G=(MatGraph *)malloc(sizeof(MatGraph));可以解决就不需要void CreateAdj(MatGraph *G)中的G=(MatGraph *)malloc(sizeof(MatGraph));
如果你就是为了在void CreateAdj(MatGraph *G)申请内存那就返回值类型改为MatGraph * 然后返回G
因为你原来void CreateAdj(MatGraph *G)函数中的 G=(MatGraph *)malloc(sizeof(MatGraph));并不会把申请地址传给void main()中的G所以会导致你DispAdj(G);中的G是个野指针
页:
[1]