基础介绍

图的数据结构

图主要由顶点和边组成


无向边用()

有向边用<>

入度:
一顶点V为头的弧的数目为入度,
出度:
以其为尾的数目为出度。

连通图

连通图生成树

图的定义与术语总结

图的基本操作

图的存储结构 邻接矩阵

邻接矩阵图的代码

#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXVEX 100 /* 最大顶点数,应由用户定义 */
#define INFINITY 65535typedef int Status;   /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef char VertexType; /* 顶点类型应由用户定义  */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */typedef struct
{VertexType vexs[MAXVEX];EdgeType arc[MAXVEX][MAXVEX];int numNodes;int numEdges;
}MGraph;//建立无向网图的邻接矩阵表示
void CreateMGraph(MGraph* G)
{int i;int j;int k;int w;printf("输入顶点数和边数: \n");scanf_s("%d,%d", &G->numNodes, &G->numEdges);for (int i = 0; i < G->numNodes; i++)scanf_s(&G->vexs[i]);for (int i = 0; i < G->numNodes; i++){for (int j = 0; j < G->numNodes; j++){G->arc[i][j] = INFINITY;/* 邻接矩阵初始化 */}}/* 读入numEdges条边,建立邻接矩阵 */for (int k = 0; k < G->numEdges; k++){printf("输入边(vi,vj)上的下标i,下标j和权w:\n");scanf_s("%d,%d,%d", &i, &j, &w); /* 输入边(vi,vj)上的权w */G->arc[i][j] = w;G->arc[j][i] = G->arc[i][j]; /* 因为是无向图,矩阵对称 */}
}
int main(void)
{MGraph G;CreateMGraph(&G);return 0;
}

邻接表存储结构

#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXVEX 100 /* 最大顶点数,应由用户定义 */typedef int Status;    /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef char VertexType; /* 顶点类型应由用户定义 */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */typedef struct EdgeNode // 边表节点
{int adjvex;  /* 邻接点域,存储该顶点对应的下标 */EdgeType info;struct EdgeNode *next;/* 链域,指向下一个邻接点 */
}EdgeNode;typedef struct VertexNode
{VertexType data; //顶点域EdgeNode* firstedge;//边表头指针
}VertexNode,AdjList[MAXVEX];typedef struct
{AdjList adjList;int numNodes;//顶点数目int numEdges;//边表数目
}GraphAdjList;// 建立图的邻接表结构
void CreateALGraph(GraphAdjList* G)
{EdgeNode* e;printf("输入顶点数和边数:\n");scanf_s("%d,%d", &G->numNodes, &G->numEdges); /* 输入顶点数和边数 */for (int i = 0; i < G->numNodes; i++) /* 读入顶点信息,建立顶点表 */{scanf_s(&G->adjList[i].data);     /* 输入顶点信息 */G->adjList[i].firstedge = NULL;     /* 将边表置为空表 */}for (int k = 0; k < G->numEdges; k++)/* 建立边表 */{int i;int j;printf("输入边(vi,vj)上的顶点序号:\n");scanf_s("%d,%d", &i, &j); /* 输入边(vi,vj)上的顶点序号 */e = new EdgeNode();e->adjvex = j;e->next = G->adjList[i].firstedge;G->adjList[i].firstedge = e; //完成链表连接}
}int main()
{GraphAdjList G;CreateALGraph(&G);return 0;
}

大话数据结构16:图相关推荐

  1. 大话数据结构笔记-图

    大话数据结构笔记-图 定义 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为 G(V,E), 其中 G表示一个图, V是图G中的顶点的集合, E是图G中边的集合. 顶点就是图中 ...

  2. 大话数据结构之图-查找算法(C++)

    大话数据结构 Unit7 查找 查找算法举例 代码 #include<iostream> using namespace std;//顺序查找 //a为数组,n为数组长度,key为关键字 ...

  3. 数据结构(16)--图的存储及实现

    参考书籍:数据结构(C语言版)严蔚敏吴伟民编著清华大学出版社 本文中的代码可从这里下载:https://github.com/qingyujean/data-structure 图状结构是一种比树形结 ...

  4. 大话数据结构 -07-1 图的定义、抽象数据类型与存储结构

    1. 定义 在图结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关. 2. 与线性表.树结构的区别 3. 相关定义 (1)无向.有向 与图边或者弧相关的数字叫做权(Weight), ...

  5. 《大话数据结构》读书笔记-图

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书,如有侵权,请联系删除. 文章目录 7.2 图的定义 7.2.1 各种图定 ...

  6. 大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 21

    大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 211 第 ...

  7. 大话数据结构 第七章 图(二) 最小生成树、最短路径、拓扑排序、关键路径算法

    大话数据结构 第七章 图(二) 最小生成树.最短路径.拓扑排序.关键路径算法 最小生成树 定义 Prim算法 Kruskal算法 最短路径 Dijkstra算法 Floyd算法 拓扑排序 AOV网 拓 ...

  8. 《大话数据结构》读书笔记-查找

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书,如有侵权,请联系删除. 文章目录 8.1 开场白 8.2 查找概论 8. ...

  9. 《大话数据结构》读书笔记-串

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书. 文章目录 5.2 串的定义 5.3串的比较 5.4串的抽象数据类型 5 ...

最新文章

  1. 新浪微博IPO,曹国伟策略之功
  2. python检查URL是否能正常访问
  3. python文件对象提供了3个读方法、分别是-python3基础之文件对象操作
  4. 怎么在电脑上任意截屏_草地上打滚、墙上任意涂鸦,幼儿园让孩子“想怎么玩就怎么玩”...
  5. 单选框 RadioButton 1130
  6. C#函数(构造函数)的重载
  7. 基于日志的交换机故障预测
  8. 产品结构bom设计 mongodb_产品结构设计·塑胶件热熔设计节选
  9. 游戏主播这个行为终于有人治了!腾讯下“禁令”
  10. linux生成随机密码的十种方法
  11. vivado dds IP核笔记
  12. JSbridge原理与实现简析
  13. Ubuntu18.04安装教程
  14. DCDC开关电源的阶跃响应和动态响应(Load Transient)的区别
  15. 程序验证(六):纳尔逊-欧朋算法(Nelson-Oppen Procedure)
  16. 1901~2100年节气表
  17. 淡泊以明志,宁静而致远
  18. Java连rabbitMQ 报错 An unexpected connection driver error occured
  19. 为什么要画ER图?有哪些画图规范?
  20. 递归算法中的时间复杂度分析

热门文章

  1. 使用SQLite数据库存储数据(1)-操作SQLite数据库
  2. String 类详解
  3. android 随机布尔值,在 Android 的某些机型,v1.2.2 v1.2.1 加密会导致 boolean 类型的值丢失的问题...
  4. 幼儿编程学java不_《终于有人说出来了——Java不适合于作为主要编程教学语言》我的看法...
  5. 单行文字垂直居中,多行文字垂直居中
  6. 小程序上传图本地片wx.chooseImage
  7. Docker(一)Centos7.0安装Docker
  8. Vue2.0+vuex+H5实现音乐播放及歌曲切换功能的方法及原理解释
  9. 小白都能玩的算法day2-数量级、输入和输出
  10. LVS负载均衡-NAT模式