数据结构图的问题
#include"stdio.h"
#define n 4
#define e 6
typedef struct node
{int adjvex;
struct node *next;
}edgenode;
typedef struct
{int vertex;
edgenode *link;
}vexnode;
typedef struct qnode
{int data;
struct qnode *next;
}linkqlist;
typedef struct
{linkqlist *front,*rear;
}linkqueue;
linkqueue *q;
vexnode ga[n];
int visited[n];
creatadjlist(vexnode *ga)
{int i,j,k;
edgenode *s;
for(i=0;i<n;i++)
{scanf("%d",&ga[i].vertex);
ga[i].link=NULL;
}
for(k=0;k<e;k++)
{scanf("%d%d",&i,&j);
s=(edgenode *)malloc(sizeof(edgenode));
s->adjvex=j;
s->next=ga[i].link;
ga[i].link=s;
s=(edgenode *)malloc(sizeof(edgenode));
s->adjvex=i;
s->next=ga[j].link;
ga[j].link=s;
}
}
DFSL(int i)
{int j;
edgenode *p;
printf("%5d",ga[i].vertex);
visited[i]=1;
p=ga[i].link;
while(p!=NULL)
{if(!visited[p->adjvex])
DFSL(p->adjvex);
p=p->next;
}
}
initlinkqueue(linkqueue *q)
{q->front=(linkqlist *)malloc(sizeof(linkqlist));
q->front->next=NULL;
q->rear=q->front;
}
int EMPTY(linkqueue *q)
{if(q->front==q->rear)
return 1;
else return 0;
}
ENQUEUE(linkqueue *q,int x)
{q->rear->next=(linkqlist *)malloc(sizeof(linkqlist));
q->rear=q->rear->next;
q->rear->data=x;
q->rear->next=NULL;
}
DEQUEUE(linkqueue *q)
{linkqlist *p;
int v;
if(q->front==q->rear)
{printf("queue is empty");v=0;}
else{p=q->front->next;
q->front->next=p->next;
if(p->next==NULL)
q->rear=q->front;
v=p->data;
free(p);}
return v;
}
BFSL(int k)
{int i;
edgenode *p;
linkqueue queue;
q=&queue;
initlinkqueue(q);
printf("%5d",ga[k].vertex);
visited[k]=1;
ENQUEUE(q,k);
while(!EMPTY(q))
{ i=DEQUEUE(q);
p=ga[i].link;
while(p!=NULL)
{if(!visited[p->adjvex])
{visited[p->adjvex]=1;
printf("%5d",ga[p->adjvex].vertex);
ENQUEUE(q,p->adjvex);
}
p=p->next;}
}
}
main()
{int i,j,v,u;
edgenode *p;
creatadjlist(ga);
for(i=0;i<n;i++)
{printf("<%d> %d",i,ga[i].vertex);
p=ga[i].link;
while(p!=NULL)
{printf("->%d",p->adjvex);
p=p->next;
}
printf("->NULL");
printf("\n");
}
printf("1.DFSL:\n");
printf("2.BFSL\n");
printf("3.exit:\n");
scanf("%d",&j);
while(j!=3)
{switch(j)
{case 1:printf("please input start point:\n");scanf("%d",&v);DFSL(v);
printf("\n");break;
case 2:printf("please input another start point:\n");scanf("%d",&u);BFSL(u);
printf("\n");break;}
scanf("%d",&j);
}
}
第一次的DFSL结果正确,BFSL的结果不对,而且程序继续下去也不对。帮改一下。