c语言数据结构无向图存储,数据结构C语言版 无向图的邻接多重表存储表示和实现...

电影2012是美国对中国的嘲讽

数据结构C语言版 无向图的邻接多重表存储表示和实现

P166

编译环境:Dev-C++ 4.9.9.2

日期:2011年2月15日

*/

#include

#include

#define MAX_NAME 3 // 顶点字符串的最大长度+1

#define MAX_INFO 80 // 相关信息字符串的最大长度+1

typedef char InfoType;

typedef char VertexType[MAX_NAME]; // 字符串类型

// AMLGraph.h 无向图的邻接多重表存储表示

#define MAX_VERTEX_NUM 20

typedef enum{unvisited,visited}VisitIf;

typedef struct EBox

{

VisitIf mark; // 访问标记

int ivex,jvex; // 该边依附的两个顶点的位置

struct EBox *ilink,*jlink; // 分别指向依附这两个顶点的下一条边

InfoType *info; // 该边信息指针

}EBox;

typedef struct

{

VertexType data;

EBox *firstedge; // 指向第一条依附该顶点的边

}VexBox;

typedef struct

{

VexBox adjmulist[MAX_VERTEX_NUM];

int vexnum,edgenum; // 无向图的当前顶点数和边数

}AMLGraph;

typedef int QElemType;

// 单链队列--队列的链式存储结构

typedef struct QNode

{

QElemType data; //数据域

struct QNode *next; //指针域

}QNode,*QueuePtr;

typedef struct

{

QueuePtr front,//队头指针,指针域指向队头元素

rear; //队尾指针,指向队尾元素

}LinkQueue;

// 若G中存在顶点u,则返回该顶点在无向图中位置;否则返回-1

int LocateVex(AMLGraph G,VertexType u)

{

int i;

for(i=0;i

if(strcmp(u,G.adjmulist[i].data)==0)

return i;

return -1;

}

// 采用邻接多重表存储结构,构造无向图G

int CreateGraph(AMLGraph *G)

{

int i,j,k,l,IncInfo;

char s[MAX_INFO];

VertexType va,vb;

EBox *p;

printf("请输入无向图G的顶点数,边数,边是否含其它信息(是:1,否:0): ");

scanf("%d,%d,%d",&(*G).vexnum,&(*G).edgenum,&IncInfo);

printf("请输入%d个顶点的值(

for(i=0;i

{

scanf("%s",(*G).adjmulist[i].data);

(*G).adjmulist[i].firstedge=NULL;

}

printf("请顺序输入每条边的两个端点(以空格作为间隔):\n");

for(k=0;k

{

scanf("%s%s%*c",va,vb); // %*c吃掉回车符

i=LocateVex(*G,va); // 一端

j=LocateVex(*G,vb); // 另一端

p=(EBox*)malloc(sizeof

(EBox));

p->mark=unvisited; // 设初值

p->ivex=i;

p->jvex=j;

p->info=NULL;

p->ilink=(*G).adjmulist[i].firstedge; // 插在表头

(*G)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值