用邻接表法表示的双向图(改单向容易,只要修改connect,disconect方法)。
此处只是表示数据结构,没有相关算法。
其中Vertex是辅助类表示顶点,其中包含一个boolean变量isVisited表示是否遍历过。
Graph表示图,实际存储顶点,以及顶点之间的关系,用一个数组存储顶点,另一个数组中存放与对应的顶点的相连的的顶点的下标。
大部分的代码实际是辅助代码,其中包括:
Vertex:顶点,其中包含一个Boolean变量,表示是否遍历过。
Node,Link:一个单向链表,存储与当前顶点向邻的节点的下标。(单向链表的详细描述见:Link
)
Graph的另一个实现请参见Graph
。
class Vertex {
private Object value;
private boolean isVisited;
Vertex(Object value) {
this.value = value;
}
void visit() { isVisited = true; }
boolean isVisited() { return isVisited; }
}
class Node {
private int index;
private Node next;
Node(int index) { this.index = index; }
void next(Node next) { this.next = next; }
Node next() { return next; }
int index() { return index; }
}
class Link {
private Node first;
private Node current;
void add(int index) {
Node node = new Node(index);
node.next(first);
first = node;
}
boolean hasNext() {
return current == null?
first != null:
current.next() != null;
}
Node next() {
if(current == null)current = first;
else current = current.next();
return current;
}
void reset() { current = null; }
void remove(int index) {
Node previous = null;
Node current = first;
while(current != null) {
if (current.index() == index) {
if(previous == null) first = current;
else previous.next(current.next());
return;
}
previous = current;
current = current.next();
}
}
}
class Graph {
private Vertex[] vertexs;
private Link[] adjTab;
private int pos = -1;
Graph(int size) {
vertexs = new Vertex[size];
adjTab = new Link[size];
}
void add(Object obj) {
assert pos < vertexs.length;
vertexs[++pos] = new Vertex(obj);
}
void connect(int from, int to) {
adjTab[from].add(to);
adjTab[to].add(from);
}
void disConnect(int from, int to) {
adjTab[from].remove(to);
adjTab[to].remove(from);
}
}
分享到:
相关推荐
邻接表法建立图程序代码 邻接表法是图的存储结构之一,通过建立邻接表来存储图的信息。在这里,我们将详细介绍邻接表法建立图程序代码的知识点。 图的定义 在图论中,图是由节点和边组成的。节点是图的基本元素,...
### 图的邻接表C++表示 在计算机科学领域,图是一种重要的数据结构,用于模拟对象之间的关系。根据图中的边是否具有方向性,可以将图分为无向图和有向图。对于稀疏图(即边的数量远小于顶点数量的平方),邻接表是...
【以邻接表的形式建立和存储图】 在图论中,图是由顶点(节点)和边(连接顶点的线)构成的数据结构。在计算机科学中,为了高效地存储和操作图,我们通常会使用不同的数据结构来表示图。其中,邻接表是一种常用的...
在计算机科学中,我们通常使用两种主要的方法来存储图:邻接矩阵和邻接表。这两种方法各有优缺点,适用于不同的场景。 ### 邻接矩阵 **邻接矩阵** 是一种直观的图存储方式,它使用一个二维数组来表示图中的边。...
本文将详细讲解如何使用邻接链表法来实现图,并介绍上述描述中的各项操作。 1. **创建图**:创建图通常涉及到定义节点(Vertex)和边(Edge)的数据结构。节点可以存储一个标识符(如整数或字符串),而边则存储...
数据结构 - 图的存储结构 - 邻接表的创建 - 无向图。 在数据结构中,图是一种非常重要的数据结构,它广泛应用于计算机科学和信息技术领域中。在本节中,我们将讨论图的存储结构,并使用 C 语言实现图的邻接表的创建...
领会图的两种主要存储结构、图基本运算算法和两种遍历算法设计内容:编写一个程序,设计带权图的邻接矩阵与邻接表的创建和输出运算,并在此基础上设计一个主程序完成如下功能:(1)建立如图所示的有向图G的邻接矩阵...
7. **函数设计**:实验中定义了几个关键函数,如`BuildGraph`用于从文件构建图的邻接表,`Visit`用于访问一个顶点,`ClearVisited`清除访问标记,`BFS`和`DFS`分别实现了广度优先和深度优先遍历。这些函数的设计体现...
- **创建图**:`CreateGraph(ALGraph& G)` 函数负责读取顶点和边的信息,并构造出邻接表。首先输入图的顶点数量和边的数量,然后逐个输入顶点和边的两个端点。 - **销毁图**:`DestroyGraph(ALGraph& G)` 函数释放...
在C++中,图的常见实现方式之一是邻接表。本项目提供了一个C++实现的邻接表,能够处理有向图和无向图,并且使用了类模板来增强代码的通用性。以下是对这个项目的详细解释: 首先,邻接表是一种存储图的有效方式,...
邻接表是图的一种常见存储方式,尤其适用于稀疏图(边的数量远小于顶点数量的平方)。本篇将详细介绍C语言实现邻接表建立图的相关知识点。 1. **图的基本概念** 图是由顶点(节点)和边组成的集合。顶点之间通过边...
图的邻接表是一种在计算机科学中用于表示图数据结构的有效方法,特别是在处理大量边的图时。在C语言中实现图的邻接表可以帮助我们更高效地执行各种图算法,如深度优先搜索(DFS)和广度优先搜索(BFS)。本程序虽然...
(1)键盘输入数据,建立一个有向图的邻接表,并输出该邻接表。 (2)在有向图的邻接表的基础上计算各顶点的度,并输出。 (3)以有向图的邻接表为基础实现并输出它的拓扑排序序列。 (4)在主函数中设计一个...
本文将深入探讨图的邻接表存储方式以及如何用Java进行遍历。 一、邻接表的概念 邻接表是图的一种常见存储方式,它为每个顶点维护一个列表,列表中包含了与该顶点相连的所有边。相比于邻接矩阵,邻接表在处理稀疏图...
在数据结构领域,邻接表是一种非常重要的图数据结构,尤其适用于存储稀疏图,即边的数量远小于顶点数量的平方。本文将详细讲解邻接表的概念、优点以及如何用C++实现。 邻接表是由一系列顶点的链表组成,每个链表...
实现图的深度和广度优先搜索 .../* 从初始点v出发深度优先遍历邻接表GL表示的图 */ void DfsAdjlist(AdjList GL,int v) /*从初始点v出发广度优先遍历邻接表GL表示的图*/ void BfsAdjlist(AdjList GL,int v)
- `CreateGraph(ALGraph &G)`函数负责创建图,输入顶点数、边数,以及顶点序列和相邻顶点信息,构建邻接表。 - `DFS(ALGraph G, int v)`和`BFS(ALGraph G, int v)`分别执行深度优先和广度优先遍历,输出访问序列。...
本文将深入探讨图的邻接表数据结构,以及如何在C语言中实现对图的操作,包括创建、查询、修改和插入顶点。邻接表是一种用于表示图的有效方法,它将每个顶点作为一个链表,链表中的节点表示与该顶点相邻的其他顶点。...
2. **邻接表**:邻接表是一种更节省空间的表示方法,尤其在处理稀疏图时。它为每个节点维护一个列表,列表中的元素是与其相连的所有节点。邻接表不存储无边的信息,因此在空间效率上优于邻接矩阵。 接下来,我们将...
邻接表是一种常用的图存储结构,适合用于存储稀疏图。它通过一个数组来表示图中的各个顶点,并且每个顶点都有一个链表与其相连,用来表示与该顶点相邻的所有顶点。 #### 结构定义 - **`AdjList`**: 定义了一个数组`...