您的位置:首页 > 理论基础 > 数据结构算法

c语言实现十字链表储存有向图(《数据结构》算法7.3)

2016-02-20 14:53 465 查看
用c语言实现《数据结构》算法7.3的十字链表储存有向图。

代码如下:

#include<stdio.h>
#define MAX_VERTEX_NUM 20
#include<stdlib.h>
typedef struct ArcBox{//弧的结构体变量
int tailvex,headvex;//弧尾和弧头的位置,跟输入顺序有关
struct ArcBox *hlink,*tlink;//分别指向弧头和该弧相同,弧尾和该弧相同的弧
}ArcBox;
typedef struct VexNode{
int data;//结点的值
ArcBox *firstin,*firstout;//分别指向该顶点第一条入弧和出弧
}VexNode;
typedef struct{
VexNode xlist[MAX_VERTEX_NUM];//表头向量
int vexnum,arcnum;//结点数和弧数
}OLGraph;
int LocateVex(OLGraph G,int v){//找到该结点的位置
for(int i=0;i<G.vexnum;i++)
if(G.xlist[i].data==v)return i;
}
void CreateDG(OLGraph &G){
int i,j,k;
ArcBox *p;
printf("输入结点数目和弧的数目:\n");
scanf("%d%d",&G.vexnum,&G.arcnum);//输入结点和弧的数目
printf("输入各个结点的值:\n");
for(i=0;i<G.vexnum;i++){
scanf("%d",&G.xlist[i].data);//输入结点的值
G.xlist[i].firstin=NULL;//初始化
G.xlist[i].firstout=NULL;//初始化
}
printf("依次序输入每条弧的弧尾和弧头:\n");
for(k=0;k<G.arcnum;k++){
int v1,v2;
scanf("%d%d",&v1,&v2);//输入弧尾和弧头
i=LocateVex(G,v1);j=LocateVex(G,v2);
p=(ArcBox *)malloc(sizeof(ArcBox));
p->tailvex=i;p->headvex=j;//对弧赋值
p->hlink=G.xlist[j].firstin;
p->tlink=G.xlist[i].firstout;
G.xlist[j].firstin=G.xlist[i].firstout=p;//对顶点赋值
}
}
int main(){
OLGraph G;
CreateDG(G);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息