#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_VERTEX_NUM 20
#define MAX 20
#define error -1
#define ok 1
//弧节点
typedef struct ArcBox
{
int tailvex,headvex;
struct ArcBox *hlink,*tlink;
}ArcBox;
//顶点节点
typedef struct VexNode
{
char data;
ArcBox *firstin,*firstout;
}VexNode;
typedef struct
{
VexNode xlist[MAX_VERTEX_NUM];
int vexnum,arcnum;
}OLGraph;
//函数原型
void GreateDG(OLGraph &G);
int LocatVex(OLGraph G,char v);
void show(OLGraph G);
int main()
{
OLGraph G;
GreateDG(G);
show(G);
return 0;
}
void GreateDG(OLGraph &G)
{
int i,j,v;
ArcBox *p;
char v1,v2;
printf("请输入顶点的个数:");
scanf("%d",&G.vexnum);
printf("请输入边的条数:");
scanf("%d",&G.arcnum);
for(i=0;i<G.vexnum;i++)
{
printf("请输入顶点的名称:");
scanf(" %c",&G.xlist[i].data);
G.xlist[i].firstin=NULL;
G.xlist[i].firstout=NULL;
}
//开始构建十字链表
for(v=0;v<G.arcnum;v++)
{
printf("\n请输入第一个顶点名:");
scanf(" %c",&v1);
printf("请输入第二个顶点名:");
scanf(" %c",&v2);
i=LocatVex(G,v1);
j=LocatVex(G,v2);
p=(ArcBox*)malloc(sizeof(ArcBox));
p->tailvex=j;
p->headvex=i;
p->hlink=G.xlist[i].firstin;
G.xlist[i].firstin=p;
p->tlink=G.xlist[j].firstout;
G.xlist[j].firstout=p;
}
}
void show(OLGraph G)
{
int i;
ArcBox *p,*q;
for(i=0;i<G.vexnum;i++)
{
p=G.xlist[i].firstin;
printf("%c :",G.xlist[i].data);
q=G.xlist[i].firstout;
while(p!=NULL)
{
printf("入 %d %d -> ",p->headvex,p->tailvex);
p=p->hlink;
}
printf("\n");
}
for(i=0;i<G.vexnum;i++)
{
p=G.xlist[i].firstin;
printf("%c :",G.xlist[i].data);
q=G.xlist[i].firstout;
while(q!=NULL)
{
printf("出 %d %d -> ",q->headvex,q->tailvex);
q=q->tlink;
}
printf("\n");
}
}
int LocatVex(OLGraph G,char v)
{
int i;
for(i=0;i<G.vexnum;i++)
{
if(G.xlist[i].data==v)
{
return i;
}
}
return error;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69347.html