构建与输出图的存储结构实现

需积分: 10 24 下载量 135 浏览量 更新于2024-09-21 收藏 7KB TXT 举报
"本次课程设计任务要求学生实现图的存储结构,可以选择建立有向图、无向图、有向网或无向网中的任意两种,并能输入图的顶点和边的信息,将这些数据存储在相应的数据结构中,最后通过输出邻接矩阵展示所建立的图。" 本文将详细讲解如何实现上述的图的建立和输出。 首先,我们需要定义图的数据结构。这里给出了两种不同的数据结构:一种是二维数组表示的`Graphic`,另一种是链式存储的`Adjlist`。 1. `Graphic` 结构: - 定义了一个`Graph`结构体,其中`edges`是一个二维整数数组,用于存储图的邻接矩阵。每个元素`edges[i][j]`表示顶点`i`到顶点`j`的边是否存在。`v`和`e`分别表示图的顶点数和边数。 2. `AGraph` 结构(基于`Adjlist`): - 定义了一个`Adjlist`结构体数组,其中每个`Adjlist`代表一个顶点及其关联的边。`data`存储顶点的字符数据,`firstarc`是一个指向`ArcNode`结构的指针,表示与当前顶点相连的第一个边。 - `ArcNode`结构用于表示边,包括`adjvex`(相邻顶点的索引)和`nextarc`(指向下一个相邻顶点的指针),形成链表结构。 - `AGraph`结构还包含`v`和`e`,分别表示图的顶点数和边数。 接下来,我们讨论如何建立图: 1. **输入处理**:用户需提供顶点和边的信息,可以使用`scanf`函数读取。例如,用户输入"1,2,A"表示顶点1和顶点2之间有一条边,这条边可能附带字符数据"A"。 2. **存储结构的选择**:根据选择的图类型(有向或无向),决定如何填充邻接矩阵或构建链表。对于有向图,`edges[i][j]=1`表示存在从顶点`i`到`j`的边;对于无向图,`edges[i][j]=edges[j][i]=1`。 3. **链式存储**:对于`Adjlist`结构,当输入一条边时,需要创建新的`ArcNode`结构并插入到对应顶点的链表中。 4. **邻接矩阵输出**:完成图的建立后,可以通过遍历`edges`数组或`AGraph`的`Adjlist`结构,打印出邻接矩阵,以展示图的结构。 最后,虽然给出的代码片段包含了图形界面的部分,但与图的建立和输出的主要主题不直接相关。这部分代码可能是用于在图形界面上绘制用户输入的坐标点,属于额外的功能扩展,而非图数据结构的实现部分。 实现图的建立和输出需要设计合适的数据结构,正确处理用户输入,以及有效地输出图的结构。对于不同的图类型,存储和操作方式会有所不同,但核心思想是准确地反映图的顶点和边的关系。