新人求教,关于建立图的临接表算法?该如何处理

新人求教,关于建立图的临接表算法??
#include"stdio.h"
#include"stdlib.h"

#define MAX_vertex_num 100
int visited[MAX_vertex_num];
typedef struct arcnode{
int adjvex;
arcnode * nextarc;
}arcnode,*arcc;

typedef struct vexnode{
char data;
arcnode *firstarc;
}vexnode;

typedef vexnode Adjlist[MAX_vertex_num];
typedef struct graph{
int vexnum;
int arcnum;
Adjlist adjlist;
}graph,*graphh;


int creategraph(graph *g){

printf("建立无向图:\n");
printf("输入顶点数和边数:\n");
scanf("%d%d",&g->vexnum,&g->arcnum);
printf("建立节点表:\n");
for(int k=0;k<g->vexnum;k++){
g->adjlist[k].data=getchar();//为什么这里循环的次数和g->vexnum的次数不同,我输入的节点
                                            是6个,但是执行了3次就跳除了循环???
g->adjlist[k].firstarc=0;
}
printf("建立边表:\n");
int m,n;
arcnode *s;
for(int q=0;q<g->arcnum;q++){
printf("输入有序对:\n");
scanf("%d",&n);
scanf("%d",&m);
s=(arcnode *)malloc(sizeof(arcnode));
s->adjvex=n;
s->nextarc=g->adjlist[m].firstarc;
g->adjlist[m].firstarc=s;
s->adjvex=m;
s->nextarc=g->adjlist[n].firstarc;
g->adjlist[n].firstarc=s;
}
return 0;
}




void DFS(graph *g,int i){
visited[i]=1;
printf(" %c ",g->adjlist[i].data);
arcc s;
for(s=g->adjlist[i].firstarc;s!=0;s=s->nextarc){
if(visited[s->adjvex]!=1)DFS(g,s->adjvex);
}

}




int main(){
graph *g;
g=(graph *)malloc(sizeof(graph));
creategraph(g);
for(int i=0;i<g->vexnum;i++)visited[i]=0;
for( i=0;i<g->vexnum;i++){
if(visited[i]!=1)DFS(g,i);
}
return 0;
}
------解决方案--------------------
引用:
引用:清除缓冲区的回车 说错了
解决了,谢谢!!!但是我还有三个问题!大神能不能帮我解答下?
1:我把回车的输入改成空格的输入为什么不行!
2:我定义creategraph(graph *g)为什么能对参数g构造成图,我记得需要用类似creategraph(graphh &amp;g)才能改变参数。{graph是结构体,gr……

也可以直接输入例如abcdef  
creategraph(graphh &g)是C++中里面的应用  不要搞混  你拿VC++编辑器写C程序 却和C++混了
数组不要,指针没有指向的时候需要