邻接表存储结构的c语言描述,数据结构C语言版 图邻接表存储表示和实现.doc

数据结构C语言版 图的邻接表存储表示和实现.txt师太,你是我心中的魔,贫僧离你越近,就离佛越远……初中的体育老师说:谁敢再穿裙子上我的课,就罚她倒立。/*

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

P163

编译环境:Dev-C++ 4.9.9.2

日期:2011年2月15日

*/

#include

// 图的邻接表存储表示

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

#define MAX_VERTEX_NUM 20

typedef int InfoType;// 存放网的权值

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

typedef enum{DG,DN,AG,AN}GraphKind; // {有向图,有向网,无向图,无向网}

typedef struct ArcNode

{

int adjvex;// 该弧所指向的顶点的位置

struct ArcNode *nextarc;// 指向下一条弧的指针

InfoType *info;// 网的权值指针)

}ArcNode;// 表结点

typedef struct VNode

{

VertexType data;// 顶点信息

ArcNode *firstarc;// 第一个表结点的地址,指向第一条依附该顶点的弧的指针

}VNode,AdjList[MAX_VERTEX_NUM];// 头结点

typedef struct

{

AdjList vertices;

int vexnum,arcnum;// 图的当前顶点数和弧数

int kind;// 图的种类标志

}ALGraph;

typedef int QElemType; // 队列类型

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

typedef struct QNode

{

QElemType data;//数据域

struct QNode *next;//指针域

}QNode,*QueuePtr;

typedef struct

{

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

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

}LinkQueue;

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

int LocateVex(ALGraph G,VertexType u)

{

int i;

for(i=0;i

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

return i;

return -1;

}

// 采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造4种图)。

int CreateGraph(ALGraph *G)

{

int i,j,k;

int w;// 权值

VertexType va,vb;

ArcNode *p;

printf("请输入图的类型(有向图:0,有向网:1,无向图:2,无向网:3): ");

scanf("%d",&(*G).kind);

printf("请输入图的顶点数和边数:(空格)\n");

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

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

for(i = 0; i < (*G).vexnum; ++i)// 构造顶点向量

{

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

(*G).vertices[i].firstarc = NULL;

}

if((*G).kind == 1 || (*G).kind == 3) // 网

printf("请顺序输入每条弧(边)的权值、弧尾和弧头(以空格作为间隔):\n");

else // 图

printf("请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔):\n");

for(k = 0;k < (*G).arcnum; ++k)// 构造表结点链表

{

if((*G).kind==1||(*G).kind==3) // 网

scanf("%d%s%s",&w,va,vb);

else// 图

scanf("%s%s",va,vb);

i = LocateVex(*G,va); // 弧尾

j = LocateVex(*G,vb); /

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值