数据结构-图结构
来源:互联网 发布:软件配置文件编辑 编辑:程序博客网 时间:2024/05/08 10:02
本文转载http://blog.csdn.net/feixiaoxing/article/details/6918768
图是数据结构里面的重要一章。通过图,我们可以判断两个点之间是不是具有连通性;通过图,我们还可以计算两个点之间的最小距离是多少;通过图,我们还可以根据不同的要求,寻找不同的合适路径。当然,有的时候为了计算的需要,我们还需要从图中抽象出最小生成树,这样在遍历计算的时候就不需要持续判断是不是遇到了循环节点。当然,这所有的一切都是从图的表示开始的。
1)矩阵表示
矩阵表示可以说是最简单的表示方法,如果说一个图中有5个点,那么我们就可以构建一个5*5的矩阵。如果点和点之间存在连接,那么填上1;反之如果不存在连接,那么可以用0表示,当然对角线上面的点是没有意义的。如下图所示:
- static int graph[5][5] =
- {
- {0, 1, 0, 1, 1},
- {1, 0, 1, 0, 1},
- {0, 1, 0, 1, 0},
- {1, 0, 1, 0, 1},
- {1, 1, 0, 1, 0}
- };
- static int graph[5][5] =
- {
- {0, 0, 0, 0, 0},
- {1, 0, 0, 0, 0},
- {0, 1, 0, 0, 0},
- {1, 0, 1, 0, 0},
- {1, 1, 0, 1, 0}
- };
- static int graph[5][5] =
- {
- {0, 0, 0, 0, 0},
- {3, 0, 0, 0, 0},
- {0, 6, 0, 0, 0},
- {8, 0, 4, 0, 0},
- {9, 2, 0, 7, 0}
- };
2)数组结构
为了改变矩阵浪费空间的特点,我们可以建立一个只有顶点和边组成的数据空间。比如说,我们定义一个这样的结构:
- typedef struct _LINE
- {
- int start;
- int end;
- int weight;
- int isDirection;
- }LINE;
但是,我们还是觉得有遗憾的地方。这个数据结构过分强调了边的意义和重要性,忽略了顶点本身的含义。因为,我们在强调边的时候,应该添加进顶点的相关特性。离开顶点的支持,单纯的边信息是没有什么含义的。
3)基于顶点链表的图表示
首先,我们定义顶点的基本结构:
- typedef struct _LINE
- {
- int end;
- int weight;
- struct _LINE* next;
- }LINE;
- typedef struct _VERTEX
- {
- int start;
- int number;
- LINE* neighbor;
- }VERTEX;
- typedef struct _PATH
- {
- int start;
- int end;
- int lenth;
- LINE* next;
- }PATH;
注意事项:
1)数组和链表是图结构的基础,朋友们应该好好掌握
2)每一种数据结构都有自己的应用场合,关键是理解其中的思想和方法
3)图的表示是图运算的基础,掌握它们是我们进一步学习的基本条件
0 0
- 数据结构-图结构
- 【数据结构】图结构
- 数据结构---->图的存储结构
- 数据结构课程设计,校园图结构
- 数据结构 - 图的存储结构
- 数据结构---图的存储结构
- 【数据结构】图的存储结构
- 数据结构 - 结构
- 数据结构:图的存储结构之邻接矩阵
- 数据结构之图(存储结构、遍历)
- 11.20数据结构----图的存储结构
- 数据结构之图(存储结构、遍历)
- 数据结构之图(存储结构、遍历)
- 数据结构之图(存储结构、遍历)
- 数据结构之图(存储结构、遍历)
- 数据结构之图(存储结构、遍历)
- 数据结构之图(存储结构、遍历)
- 《数据结构》第一章 知识点结构导图
- 会计要素
- grid 安装过程报错:NS-40937 以下主机名无效[rac2] 问题处理
- cpu内存占用率都不高,电脑卡的问题
- 万语千言话自考
- 关于C/C++结构体的一点知识
- 数据结构-图结构
- 求两个给定范围之间的随机数
- 通过ServletConfig对象获取Servlet配置参数
- openssl CLI
- hdu 1114(完全背包裸题)
- linux下的shell 快捷键
- 字符串库函数strlen,strcmp,strcpy,strncpy,strcat,strncat自定义实现
- 关于PreTranslateMessage
- 利用Iterator删除集合元素