数据结构问题求助

qq_43731685 2020-05-09 09:35:37

#include<stdio.h>
#include<stdlib.h>
#define maxVertNum 100
typedef struct{
int adjvert;
struct node *next;
}edgeNode;//边结构体
typedef struct{
char vertinfo;
edgeNode *firstedge;
}vertNode;//顶点结构体
typedef struct{
vertNode verts[maxVertNum];
int vertNum,edgeNum; //顶点数和边数
}ALGraph; //图结构体
void creatGraph(ALGraph *G,int flag){
int i,j,p,q;
edgeNode *s;
printf("请输入顶点数和边数:");
scanf("%d %d",&G->vertNum,&G->edgeNum);
for(i=0;i<G->vertNum;i++){ //初始化顶点表
getchar();
printf("请输入第%d个顶点信息:",i+1);
G->verts[i].vertinfo=getchar();
G->verts[i].firstedge=NULL;
}
for(j=0;j<G->edgeNum;j++){ //初始化边表
printf("请输入相连接的顶点信息:"); //0 1
scanf("%d%d",&p,&q);
s=(edgeNode*)malloc(sizeof(edgeNode));
s->adjvert=q;
s->next=G->verts[p].firstedge;
G->verts[p].firstedge=s;
if(flag==0){//若为无向图则1 0 添加
s=(edgeNode *)malloc(sizeof(edgeNode));
s->adjvert=p;
s->next=G->verts[q].firstedge;
G->verts[q].firstedge=s;
}
}
}
void printGraph(ALGraph *G){
int i;
for(i=0;i<G->vertNum;i++){
printf("%d %c ",i,G->verts[i].vertinfo);
while(1){
if(G->verts[i].firstedge==NULL){
printf("∧");
break;
}
printf("%d->",G->verts[i].firstedge->adjvert);
G->verts[i].firstedge=G->verts[i].firstedge->next;
}
printf("\n");
}
}
void main(){
int flag;
ALGraph *G;
printf("该图是否为有向图? 是1/否0\n");
scanf("%d",&flag);
G=(ALGraph *)malloc(sizeof(ALGraph));
creatGraph(G,flag);
printGraph(G);
printGraph(G);
}

为什么第二次就打印不出来了?怎么才能将指针再返回到头结点。
...全文
90 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-05-09
  • 打赏
  • 举报
回复
printGraph时不要用 G->verts[i].firstedge=G->verts[i].firstedge->next 的方式来遍历下一个节点,你这样就会覆盖G->verts[i].firstedge的信息,原来的信息就丢失了,只剩下最后邻接点NULL,所以第二次就打印不了了。 用个临时指针变量来遍历,即 for(i=0; i<G->vertNum; i++){ printf(“%d %c “, i, G->verts[i].vertinfo); edgeNode *p = G->verts[i].firstedge;//用临时变量p来遍历 while(1){ if(p==NULL) { printf(“^”); break; } printf(“%d->”, p->adjvert); p=p->next; //用临时变量,不会覆盖G->verts[i].firstedge原来的信息 } printf(“\n”); }

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧