`
shenyu
  • 浏览: 122557 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Graph 图-邻接表法

阅读更多

用邻接表法表示的双向图(改单向容易,只要修改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++表示

    ### 图的邻接表C++表示 在计算机科学领域,图是一种重要的数据结构,用于模拟对象之间的关系。根据图中的边是否具有方向性,可以将图分为无向图和有向图。对于稀疏图(即边的数量远小于顶点数量的平方),邻接表是...

    以邻接表的形式建立和存储图

    【以邻接表的形式建立和存储图】 在图论中,图是由顶点(节点)和边(连接顶点的线)构成的数据结构。在计算机科学中,为了高效地存储和操作图,我们通常会使用不同的数据结构来表示图。其中,邻接表是一种常用的...

    图的邻接矩阵存储和邻接表存储

    在计算机科学中,我们通常使用两种主要的方法来存储图:邻接矩阵和邻接表。这两种方法各有优缺点,适用于不同的场景。 ### 邻接矩阵 **邻接矩阵** 是一种直观的图存储方式,它使用一个二维数组来表示图中的边。...

    邻接链表法实现图C代码

    本文将详细讲解如何使用邻接链表法来实现图,并介绍上述描述中的各项操作。 1. **创建图**:创建图通常涉及到定义节点(Vertex)和边(Edge)的数据结构。节点可以存储一个标识符(如整数或字符串),而边则存储...

    数据结构-c语言-带main函数-图7.2-图的存储结构-图的邻接表的创建-无向图。

    数据结构 - 图的存储结构 - 邻接表的创建 - 无向图。 在数据结构中,图是一种非常重要的数据结构,它广泛应用于计算机科学和信息技术领域中。在本节中,我们将讨论图的存储结构,并使用 C 语言实现图的邻接表的创建...

    新建 DOC 文档_实现图的邻接矩阵和邻接表存储_doc_图的遍历算法_

    领会图的两种主要存储结构、图基本运算算法和两种遍历算法设计内容:编写一个程序,设计带权图的邻接矩阵与邻接表的创建和输出运算,并在此基础上设计一个主程序完成如下功能:(1)建立如图所示的有向图G的邻接矩阵...

    数据结构实验报告-图-基于邻接表求连通无向图的DFS与BFS生成树-实验内容与要求.docx

    7. **函数设计**:实验中定义了几个关键函数,如`BuildGraph`用于从文件构建图的邻接表,`Visit`用于访问一个顶点,`ClearVisited`清除访问标记,`BFS`和`DFS`分别实现了广度优先和深度优先遍历。这些函数的设计体现...

    数据结构 图的邻接表存储

    - **创建图**:`CreateGraph(ALGraph& G)` 函数负责读取顶点和边的信息,并构造出邻接表。首先输入图的顶点数量和边的数量,然后逐个输入顶点和边的两个端点。 - **销毁图**:`DestroyGraph(ALGraph& G)` 函数释放...

    图的邻接表实现.rar

    在C++中,图的常见实现方式之一是邻接表。本项目提供了一个C++实现的邻接表,能够处理有向图和无向图,并且使用了类模板来增强代码的通用性。以下是对这个项目的详细解释: 首先,邻接表是一种存储图的有效方式,...

    c代码-邻接表建立图

    邻接表是图的一种常见存储方式,尤其适用于稀疏图(边的数量远小于顶点数量的平方)。本篇将详细介绍C语言实现邻接表建立图的相关知识点。 1. **图的基本概念** 图是由顶点(节点)和边组成的集合。顶点之间通过边...

    图的邻接表(c语言 算法 程序)

    图的邻接表是一种在计算机科学中用于表示图数据结构的有效方法,特别是在处理大量边的图时。在C语言中实现图的邻接表可以帮助我们更高效地执行各种图算法,如深度优先搜索(DFS)和广度优先搜索(BFS)。本程序虽然...

    database-Graph.rar_4 3 2 1_无向图环_有向邻接表_邻接表做图

    (1)键盘输入数据,建立一个有向图的邻接表,并输出该邻接表。 (2)在有向图的邻接表的基础上计算各顶点的度,并输出。 (3)以有向图的邻接表为基础实现并输出它的拓扑排序序列。 (4)在主函数中设计一个...

    图的邻接表存储及遍历(JAVA)

    本文将深入探讨图的邻接表存储方式以及如何用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)

    本文将深入探讨图的邻接表数据结构,以及如何在C语言中实现对图的操作,包括创建、查询、修改和插入顶点。邻接表是一种用于表示图的有效方法,它将每个顶点作为一个链表,链表中的节点表示与该顶点相邻的其他顶点。...

    深度优先搜索 邻接矩阵邻接表

    2. **邻接表**:邻接表是一种更节省空间的表示方法,尤其在处理稀疏图时。它为每个节点维护一个列表,列表中的元素是与其相连的所有节点。邻接表不存储无边的信息,因此在空间效率上优于邻接矩阵。 接下来,我们将...

    图的邻接表及遍历

    邻接表是一种常用的图存储结构,适合用于存储稀疏图。它通过一个数组来表示图中的各个顶点,并且每个顶点都有一个链表与其相连,用来表示与该顶点相邻的所有顶点。 #### 结构定义 - **`AdjList`**: 定义了一个数组`...

Global site tag (gtag.js) - Google Analytics