马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#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[MAXV][MAXV]; //邻接矩阵数组
int n,e; //顶点数,边数
VertexType vexs[MAXV]; //顶点信息
}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[i].no);
i++;
getchar();
}
i=0;
printf("请输入邻接矩阵:\n");
while(i<G->n)
{
while(j<G->n)
{
scanf("%d",&G->edges[i][j]);
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[i][j]);
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是个野指针
|