图的十字链表表示法(有向图)-数据结构(19)
来源:互联网 发布:苏客会孵化器知乎 编辑:程序博客网 时间:2024/04/29 11:53
一、为什么会出现十字链表
在上一节中可以看到图的数值存储方法,可以看到这种存储方法很浪费空间,一旦数组大了,要遍历图都需要整个遍历。因此遍出现了邻接表,邻接表是加多一个指针为了保存后继。而十字链表即保存了入链和出链。
二、存储结构
//==========有向图的十字链表===============typedef int InfoType;typedef struct ArcBox{int tailvex, headvex;//数组索引的弧头和弧尾struct ArcBox *hlink, *tlink;//头链和尾链 头链是弧头相同的下一条弧 尾弧是弧尾相同的一条弧InfoType info;}ArcBox;//弧typedef struct VexNode{VertexType data;ArcBox *firstin, *firstout;}VexNode;//头结点typedef struct{VexNode xlist[MAX_VERTEX_NUM];int vexnum, arcnum;//顶点总数 和弧总数}OLGraph;
三、操作
Status CreateDG(OLGraph &G, int vexnum, char * vexs, int arcnum, int maps[][6]){//创建有向图G.vexnum = vexnum;G.arcnum = arcnum;for (int i = 0; i < G.vexnum; i++){//初始化指针G.xlist[i].data = vexs[i];G.xlist[i].firstin = NULL;G.xlist[i].firstout = NULL;}for (int i = 0; i < vexnum; i++){for (int j = 0; j < vexnum; j++){if (maps[i][j] != 0){//i到j这个有有弧ArcBox * p = (ArcBox*)malloc(sizeof(ArcBox));*p = { i, j, G.xlist[j].firstin, G.xlist[i].firstout, maps[i][j] };G.xlist[i].firstout = p;G.xlist[j].firstin = p;}}}return OK;}//对弧的所有遍历.void PrintfGraphDg(OLGraph G){printf("弧尾\t弧头\n");for (int i = 0; i < G.vexnum; i++){ArcBox* arc = G.xlist[i].firstout;while (arc!=NULL){printf("%d\t%d \t%c->%c 权重:%d\n", arc->tailvex, arc->headvex, G.xlist[arc->tailvex].data, G.xlist[arc->headvex].data,arc->info);arc = arc->tlink;}}}
四、执行
//用十字链表创建一个有向图P165int vexnum = 4;char *vexs = "abcd";int arcnum = 7;int maps[4][4] = {{ 0, 1, 1, 0 },{ 0, 0, 0, 0 },{ 1, 0, 0, 1 },{ 1, 1, 1, 0 },};OLGraph G;CreateDG(G,vexnum,vexs,arcnum,maps);PrintfGraphDg(G);
输出:
弧尾 弧头0 2 a->c 权重:10 1 a->b 权重:12 3 c->d 权重:12 0 c->a 权重:13 2 d->c 权重:13 1 d->b 权重:13 0 d->a 权重:1请按任意键继续. . .
阅读全文
0 0
- 图的十字链表表示法(有向图)-数据结构(19)
- 用十字链表表示的有向图
- 有向图的十字链表表示
- (学习java)用十字链表表示有向图
- 数据结构之图的十字链表表示法
- 图算法-----图的十字链表表示法
- 有向图的十字链表
- 有向图的邻接表表示
- 图的十字链表表示的c++实现
- 有向图的邻接表表示法
- 有向图的邻接表表示法
- 有向图的邻接表表示法
- 有向图的邻接表表示法
- 数据结构:有向图的十字链表存储表示(c实现)
- 十字链表存储有向图
- 建立一个有向图的十字链表
- 2011.6.18 图论,有向图的十字链表
- 有向图的十字链表存储
- 集合框架中HashMap 和HashTable concurrentHash
- Linux上free命令
- xml入门(三)----shcema
- windows下python及其第三方库安装方法
- Hadoop中HDFS常用命令
- 图的十字链表表示法(有向图)-数据结构(19)
- 《java设计模式》:工厂模式
- 关于指针的初步学习
- Linux 操作SQLite的笔记
- 伸展树模板题
- Activity 启动模式(任务和返回栈)
- RecyclerView系列(一)添加头部、尾部View
- 廖雪峰的Git教程十--解决冲突
- linux串口编程