包括

  1. 图的邻接表储存结构
  2. 图的邻接表储存结构的创建
  3. 图的输出
  4. 图的销毁

图的邻接表储存结构

#define MAXV 5  //矩阵长宽
#define INF 32767  //无穷
typedef struct ANode
{int adjvex;  //该边的邻接点编号struct ANode* nextarc;  //指向下一条边的指针int weight;  //该边的相关信息,如权值
}ArcNode;  //边结点的类型
typedef struct Vnode
{int info;  //顶点的其他信息ArcNode* firstarc;  //指向第一个边结点
}VNode;  //邻接表的头结点类型
typedef struct
{VNode adjlist[MAXV];  //邻接表的头结点数组int n, e;  //n定点数,e边数
}AdjGraph;  //完整的图邻接表类型

示例邻接矩阵(先横再竖)

对应的图

总代码

#include<iostream>
using namespace std;#define MAXV 5  //矩阵长宽
#define INF 32767  //无穷
typedef struct ANode
{int adjvex;  //该边的邻接点编号struct ANode* nextarc;  //指向下一条边的指针int weight;  //该边的相关信息,如权值
}ArcNode;  //边结点的类型
typedef struct Vnode
{int info;  //顶点的其他信息ArcNode* firstarc;  //指向第一个边结点
}VNode;  //邻接表的头结点类型
typedef struct
{VNode adjlist[MAXV];  //邻接表的头结点数组int n, e;  //n定点数,e边数
}AdjGraph;  //完整的图邻接表类型void CreateAdj(AdjGraph*& G, int A[MAXV][MAXV], int n, int e)  //创建图的邻接表
{int i, j; ArcNode* p;  //i,j计数变量G = (AdjGraph*)malloc(sizeof(AdjGraph));  //给G分配空间for (i = 0; i < n; i++)G->adjlist[i].firstarc = NULL;  //给邻接表中所有头结点的指针域赋予初值for(i=0;i<n;i++)  //检查邻接矩阵中的每个元素for(j=n-1;j>=0;j--)if (A[i][j] != 0 && A[i][j] != INF)  //存在一条边{p = (ArcNode*)malloc(sizeof(ArcNode));  //创建一个节点pp->adjvex = j;   //存放邻接点p->weight = A[i][j];  //存放权p->nextarc = G->adjlist[i].firstarc;  //采用头插法插入节点pG->adjlist[i].firstarc = p;}G->n = n; G->e = e;
}void DispAdj(AdjGraph* G)  //输出邻接表G
{int i; ArcNode* p;  //指针p和计数变量ifor (i = 0; i < G->n; i++){p = G->adjlist[i].firstarc;  //边结点cout << i;  //边结点的编号cout << ":";while (p != NULL)  //如果p邻接点不为空,输出p的编号和权值{cout << p->adjvex;cout <<"[";cout << +p->weight;cout << "]→";p = p->nextarc;}cout << "  ∧\n";  //尾部}
}void DestroyAdj(AdjGraph*& G) {  //销毁邻接表int i; ArcNode* pre, * p;for (i = 0; i < G->n; i++) {  //扫描所有的单链表pre = G->adjlist[i].firstarc;  //p指向第i个单链表的头结点if (pre != NULL) {  p = pre->nextarc;while (p != NULL){free(pre);  //释放prepre = p; p = p->nextarc;}free(pre);  //最后循环结束,释放pre}}free(G);  //释放邻接表指针
}int main() {int A[MAXV][MAXV] = { {0,1,0,1,1},{1,0,1,1,0},{0,1,0,1,1},{1,1,1,0,1},{1,0,1,1,0} };  //我们的邻接矩阵数组AdjGraph *G = new AdjGraph;  //邻接表指针int n = 5;int e = 8;CreateAdj(G, A, n, e);  //创建图的邻接表DispAdj(G);  //输出图的邻接表DestroyAdj(G);  //释放图的邻接表
}

输出结果:
第一列数字表示顶点,中括号前的数字表示顶点,中括号里的数字表示权值,∧表示结尾。

图的邻接表储存方法和基本运算算法相关推荐

  1. 图采用邻接表存储,设计一个算法,判断顶点i和顶点j(i!=j)之间是否有路径

    算法思想:只要以i为起点,进行遍历,只要遍历过程中遇到了j,就证明有路径. 算法代码 int DFSTravel(AGraph *G,int i,int j) {int k;for(k=0;k< ...

  2. 数据结构 图的邻接表和邻接矩阵实现———c语言

    图的邻接矩阵实现 逻辑结构分为两部分:V和E集合.因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵.邻接矩阵又分为有向图邻接矩阵和无向图 ...

  3. 【数据结构】邻接表的储存结构 建立图的邻接表算法

    [数据结构]邻接矩阵及其实现 一个图的邻接矩阵的表示是唯一的,但其邻接表表示不唯一,这是因为在邻接表结构中,各便表结点的链接次序取决于建立邻接表时的算法以及输入的次序. 一般而言邻接矩阵适合存储稠密图 ...

  4. mysql 邻接表_图的邻接表存储结构详解

    通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表.邻接多重表和十字链表. 本节先讲解图的邻接表存储法.邻接表既适用于存储无向图,也适用于存储有向图. 在具体讲解邻接表存储图的实现方 ...

  5. 数据结构——图的邻接表存储

    数据结构--图的邻接表存储 功能实现: (1)图的邻接矩阵的储存 (2)深度优先遍历 (3).广度优先遍历 (4)求结点的度 (5)判断图是否连通 (6)求最小生成树 参考代码 #include &l ...

  6. 图的邻接表的链表实现

    图的邻接表的实现 正确定义图结点 掌握图的邻接表表示法 根据图的邻接表输出邻接点 利用邻接表求各点的度 这里使用链表连接各个结点构造图的邻接表:很多术语可能不对,多多包涵: public class ...

  7. c语言实现无向图的邻接表储存

    图有一种邻接表储存结构,这里以无向图为例,输入图的参数,构造并输出图的邻接表. #include<stdio.h> #include<stdlib.h> #define MAX ...

  8. C/C++二级指针概念及应用(有向图的邻接表(拓扑排序)、有向网图的邻接表、树的孩子表示)

    目录 一.概述 例1: 例2: 代码: 二.实例 1.有向图的邻接表(拓扑排序) 2.有向网图的邻接表 3.树的孩子表示 一.概述 二级指针:指向指针的指针.一般需要修改地址的时候会用到二级指针. 注 ...

  9. 数据结构——图-有向带权图的邻接表

    #include <stdio.h> #include <stdlib.h> #define VertexType char //顶点的数据类型(char) #define V ...

最新文章

  1. python奥运五环_python如何画奥运五环
  2. 大话android 进程通信之AIDL
  3. 关于HTTP_CLIENT_IP,HTTP_X_FORWAR
  4. 5、Dcoker 容器数据卷用-v命令添加
  5. 九、“行胜于言车胜马,负重致远向前途”
  6. MSDN中Enumerating All Processes枚举所有进程事例编译错误解析办法
  7. Flutter文本组件Text
  8. Nonebot部署机器人常见问题
  9. declares(declares是什么意思)
  10. 俄罗斯方块c语言程序方案设计,c语言俄罗斯方块游戏程序方案设计书报告.doc
  11. xxl-job分布式任务调度平台
  12. 圆角矩形大小怎么调整html,html圆角矩形
  13. dwg如何转换成pdf格式?
  14. Private,Public,Protected
  15. 谷歌学术里面的代码查找
  16. python用input输入list_python怎么用input函数输入一个列表
  17. iOS中使用storyboard进行布局
  18. 非接环境(PPSE)和接触环境(PSE)的FCI有什么区别
  19. 关于力控无法插入图片
  20. 论文的参考文献,添加交叉引用,实现编号自动更新,及编号1无法自动更新问题解决方法!!!

热门文章

  1. critic法计算_强化学习(Reinforcement learning)中Actor-Critic算法该如何深入理解?...
  2. ubuntu 20.04 部署edusoho企培版(安装包部署)
  3. 暑期实习+秋招面经合集(更新ing)
  4. CGB2110-DAY09-Mybatis
  5. 意大利更新居留需要的身份的翻译
  6. python图像对比_python对比图片
  7. Snackbar的使用和顶部Snackbar实现
  8. 多线程join会和和detach分离的区别
  9. MySQLi扩展的使用
  10. 如何策划一场银行校招线上笔试?