图2——利用邻接表创建有向图

假设以邻接表作为图的存储结构,编写算法,创建有向图并输出邻接表。

主要考查对邻接表的理解。图的邻接表分为两个部分:表头结点和边表结点,因此创建有向图也分成两部分:一是创建表头结点,二是创建边表结点构成的边表。

创建表头结点就是根据输入的结点信息,将结点信息直接存入对应的数据域中,并且将该结点的指针域置为NULL。

for(int i=0;i<G->vexnum;i++)
{
    cin>>G->vertex[i].data;
    G->vertex[i].firstarc=NULL;
}
创建边表就是根据输入的弧信息,创建新结点,将该结点插入到对应的链表中。
for(int k=0;k<G->arcnum;k++)
{
    cin>>v1>>v2;
    i=LocateVertex(*G,v1);
    j=LocateVertex(*G,v2);
    p=(ArcNode*)malloc(sizeof(ArcNode));
    p->adjvex=j;
    p->nextarc=G->vertex[i].firstarc;
    G->vertex[i].firstarc=p;
}

/*
6 9

a b c d  e f

a b
a c
a f
f c
b c
b f
c d
d a
e d

*/

code:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <iostream>
using namespace std;
typedef char VertexType[4];
typedef char InfoPtr;
typedef int VRType;
#define  MAXSIZE 100
typedef enum {DG,DN,UG,UN}GraphKind;
typedef struct ArcNode
{int adjvex;InfoPtr *info;struct ArcNode *nextarc;}ArcNode;
typedef struct VNode
{VertexType data;ArcNode *firstarc;
}VNode,AdjList[MAXSIZE];
typedef struct
{AdjList vertex;int vexnum, arcnum;GraphKind kind;}AdjGraph;
int LocateVertex(AdjGraph G, VertexType v);
void CreateGraph(AdjGraph *G);
void DisplayGraph(AdjGraph G);
void DestoryGraph(AdjGraph *G);
int LocateVertex(AdjGraph G, VertexType v)
{int i;for (i = 0; i < G.vexnum; ++i){if (strcmp(G.vertex[i].data, v) == 0){return i;}}return -1;
}
void CreateGraph(AdjGraph *G)
{int i, j, k;VertexType v1, v2;ArcNode *p;cout << "请输入图的顶点数和边数 ";cin >> (*G).vexnum >> (*G).arcnum;cout << "请输入" <<G->vexnum<< "个顶点的值:" << endl;for (i = 0; i < G->vexnum;i++){cin >> G->vertex[i].data;G->vertex[i].firstarc = NULL;}cout << "请输入弧尾  弧头" << endl;for (k = 0; k < G->arcnum;k++){cin >> v1 >> v2;i = LocateVertex(*G, v1);j = LocateVertex(*G, v2);p = (ArcNode*)malloc(sizeof(ArcNode));p->adjvex = j;p->info = NULL;p->nextarc = G->vertex[i].firstarc;G->vertex[i].firstarc = p;}(*G).kind = DG;
}void DestoryGraph(AdjGraph *G)
{int i;ArcNode *p, *q;for (i = 0; i < (*G).vexnum;i++){p = G->vertex[i].firstarc;if (p!=NULL){q = p->nextarc;free(p);p = q;}}(*G).vexnum = 0;(*G).arcnum = 0;
}void DisplayGraph(AdjGraph G)
{int i;ArcNode *p;cout << G.vexnum << "个顶点:" << endl;for (i = 0; i < G.vexnum;i++){cout << G.vertex[i].data << " ";}cout << endl << G.arcnum << "条边:"<<endl;for (i = 0; i < G.vexnum;i++){p = G.vertex[i].firstarc;while (p){cout << G.vertex[i].data << "→" << G.vertex[p->adjvex].data << " ";p = p->nextarc;}cout << endl;}
}void main()
{AdjGraph G;cout << "采用邻接矩阵创建有向图G:" << endl;CreateGraph(&G);cout << "输入有向图G的邻接表:" << endl;DisplayGraph(G);DestoryGraph(&G);system("pause");
}

结果:

图2——利用邻接表创建有向图相关推荐

  1. 利用邻接表创建无向图

    #include<iostream> using namespace std; #define MVNum 100 #define OK 1 typedef char VerTexType ...

  2. 图:图的邻接表创建、深度优先遍历和广度优先遍历代码实现

    邻接表介绍 邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构比较较浪费存储空间.如果不想浪费存储空间,大家肯定会先到链表.需要空间的时候再才想内存去申请,同样适用于图 ...

  3. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...

  4. 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径。设计算法,将一个无向图的邻接矩阵转换为邻接表。

    采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径.设计算法,将一个无向图的邻接矩阵转换为邻接表. 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径. 设计算法,将一个无向图的邻 ...

  5. 6-6 采用邻接表创建无向图

    采用邻接表创建无向图G ,依次输出各顶点的度. 函数接口定义: void CreateUDG(ALGraph &G); 其中 G 是采用邻接表表示的无向图. 裁判测试程序样例: #includ ...

  6. 数据结构与算法A实验六图论---7-11 邻接表创建无向图

    采用邻接表创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一个字符表 ...

  7. 用邻接表存储图c语言,邻接表、邻接多重表、十字链表及C语言实现

    上一节介绍了如何使用顺序存储结构存储邻接多重表和 邻接的意思是顶点之间有边或者弧存在,通过当前顶点,可以直接找到下一个顶点. 邻接表 使用邻接表存储图时,对于图中的每一个顶点和它相关的邻接点,都存储到 ...

  8. 使用邻接表创建无向图和有向图

    图的邻接表表示法: 邻接表(Adjacency List) 是图的 一 种链式存储结构.在邻接表中,对图中每个顶点V建立一个单链表,把与 V相邻接的顶点放在这个链表中.邻接表中每个单链表的第一个结点存 ...

  9. 图(用list邻接表表示)的深度优先和广度优先(递归和非递归实现)

    #include<iostream> #include<string> #include<list> #include<queue> #include& ...

最新文章

  1. 【pytorch】nn.conv1d的使用
  2. 【剑指offer-Java版】39二叉树的深度
  3. java 遍历xml子节点,Axiom解析XML,axiomxml,1、遍历XML全部节点,
  4. Java中的代码点和代码单元
  5. Gitlab备份与恢复[七]
  6. 算法题题目集合一,欢迎评论留言
  7. 设计模式适配器模式_适配器设计模式示例
  8. 诺奖得主涉非法实验,其合作者被曝虐待众多病人,被协会除名
  9. 区间DP--凸多边形三角剖分
  10. php自带解压缩,PHP自带ZIP压缩、解压缩类ZipArchiv使用指南_PHP教程
  11. AndroidStudio_Android中使用非阻塞延迟的方法_利用Handler实现---Android原生开发工作笔记218
  12. Django + Uwsgi + Nginx 实现生产环境部署1
  13. 广州科源980tc数控系统说明书_广州数控GSK980TC3车床数控系统 操作轴名
  14. MySQL批量插入性能优化
  15. gcode 解析入门1-1
  16. c++ fbxsdk安装配置_Linux上安装软件 - coydone
  17. 电脑cpu风扇转一下就停无法开机_电脑cpu风扇转一下停一下,详细教您电脑cpu风扇转一下停一下怎么办...
  18. 乌鲁木齐云计算中心将于5月正式竣工并投入使用
  19. Android使用XML做动画UI
  20. android 4.4 短信拦截,Android 4.4 KitKat升级率已经接近18%

热门文章

  1. 更新map中已存在的value值
  2. 微服务网关soul搭建
  3. 计算机垃圾回收站内容怎么恢复,回收站的文件怎么恢复_回收站文件清空了怎么恢复-win7之家...
  4. MySQL的进程状态
  5. LINUX线程及线程间通信
  6. 2020 - 04 - 18 个人笔记
  7. 南阳理工学院ACM多乐赛暨16级退役纪念赛野鸡题解(含代码
  8. 【笔试】三七互娱笔试 web后端工程师
  9. ISP—图像调试实习生(第七天)
  10. 利用c语言中printf输出图形