图的邻接表的建立和深度优先遍历,递归与非递归
下边代码块是邻接表的建立
typedef enum{
DG,UDG}GraphKind;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *next;
}ArcNode;
typedef struct VertexNode
{
char vexdata;
ArcNode *head;
}VertexNode;
typedef struct
{
VertexNode vertex[MAX_VER_NUM];
int vexnum,arcnum;
GraphKind Type;
}LGraph;
int index(char vex,LGraph *lg)
{
int i;
for(i=1;i<=lg->vexnum;i++)
{
if(lg->vertex[i].vexdata == vex)
{
return i;
}
}
return 0;
}
void Creat_LG(LGraph *lg)
{
int i,j,v1_index,v2_index,type;
char v1,v2;
ArcNode *p1,*p2;
printf("please input graph type 0.DG 1.UDG. input nums:");
scanf("%d",&type);
if(type == 0)
{
lg->Type = DG;
}
else if(type == 1)
{
lg->Type = UDG;
}
else
{
printf("please input 0 or 1!!!");
return;
}
printf("Please input vexnum:");
scanf("%d",&lg->vexnum);
printf("Please input arcnum:");
scanf("%d",&lg->arcnum);
getchar();
for (i=1;i<=lg->vexnum;i++)
{
lg->vertex[i].head = NULL;
printf("Please input %d vex:",i);
scanf("%c",&lg->vertex[i].vexdata);
getchar();
}
for (j=1;j<=lg->arcnum;j++)
{
printf("Please input %d arc(vex1 vex2):",j);
scanf("%c %c",&v1,&v2);
getchar();
v1_index = index(v1,lg);
v2_index = index(v2,lg);
if (lg->Type == 1)
{
p1 = (ArcNode *