也是以前自己的笔记,直接从为知笔记中复制过来的。
那时候自己脑子抽了,忘了可以直接从百度中搜索Java语言的图的相关知识,便仿照C语言版数据结构的教科书图那章的知识点花了一下午的时间写出来的。
额。。好像还是没有多少注释。
package com.ct.graph;
import java.util.Scanner;
//边
class Edge{
public int index; //边所连接节点
public Edge next; //指向下一个节点
}
//顶点
class VexNode{
public char data; //顶点中数据
Edge firstedge; //数组指向的下一个节点
}
//邻接表
class Graph{
VexNode adjVex[] = new VexNode[100]; //邻接表中的数组
public Graph(){
for(int i=0; i<100; i++){
adjVex[i] = new VexNode();
}
}
public int vexnum, arcnum; //顶点数目,边的数目
}
public class Main {
//创建邻接表
static Graph create(){
Graph G = new Graph();
Scanner sc = new Scanner(System.in);
System.out.println("输入顶点和边的数目");
G.vexnum = sc.nextInt();
G.arcnum = sc.nextInt();
System.out.println("输入顶点数据:");
for(int i=0; i<G.vexnum; i++){
System.out.printf("输入第%d个顶点的数据: ",i+1);
G.adjVex[i].data = sc.next().charAt(0);
G.adjVex[i].firstedge = null;
}
System.out.println("输入边的信息:");
for(int i=0; i<G.arcnum; i++){
System.out.printf("输入第%d条边连接的顶底(以空格隔开): ",i+1);
char v1 = sc.next().charAt(0);
char v2 = sc.next().charAt(0);
int index1 = locate(v1,G);
int index2 = locate(v2,G);
Edge e;
e = new Edge();
e.index = index2;
e.next = G.adjVex[index1].firstedge;
G.adjVex[index1].firstedge = e;
e = new Edge();
e.index = index1;
e.next = G.adjVex[index2].firstedge;
G.adjVex[index2].firstedge = e;
}
return G;
}
//返回数据位置
static int locate(char data, Graph G){
int result = -1;
for(int i=0; i<G.vexnum; i++){
if(data == G.adjVex[i].data){
result = i;
break;
}
}
return result;
}
//输出邻接表的内容
static void print(Graph G){
for(int i=0; i<G.vexnum; i++){
System.out.print(G.adjVex[i].data);
Edge e = G.adjVex[i].firstedge;
while(e != null){
System.out.print(G.adjVex[e.index].data);
e = e.next;
}
System.out.println();
}
}
public static void main(String[] args) {
Graph G = create();
print(G);
}
}
分享到:
相关推荐
在计算机科学和图论中,邻接矩阵和邻接表是两种常见的表示图的数据结构。本文将详细讨论这两种数据结构,以及如何在MATLAB中进行转换。我们将专注于标题和描述中提到的MATLAB程序,该程序能够将邻接表转换为邻接矩阵...
**邻接表和逆邻接表是图论中两种重要的数据结构,用于高效地存储和操作图的信息。** **邻接表**是一种节省空间的图的存储方式,尤其适用于稀疏图(边的数量远小于顶点数量的平方)。在邻接表中,每个顶点都有一个...
### 图的邻接表C++表示 在计算机科学领域,图是一种重要的数据结构,用于模拟对象之间的关系。根据图中的边是否具有方向性,可以将图分为无向图和有向图。对于稀疏图(即边的数量远小于顶点数量的平方),邻接表是...
在编程中,有多种方法来存储图,其中两种常用的方法是邻接矩阵和邻接表。这两种方法各有优缺点,适用于不同类型的图和不同的操作需求。 邻接矩阵是一种二维数组,其中的每个元素代表两个顶点之间是否存在边。如果...
邻接表是实现有向图的一种常见且高效的数据结构。 邻接表由两部分组成:节点数组和边列表。对于一个包含n个节点的图,我们通常会有一个大小为n的数组,每个数组元素对应一个节点。数组中的每个元素又包含一个列表,...
【以邻接表的形式建立和存储图】 在图论中,图是由顶点(节点)和边(连接顶点的线)构成的数据结构。在计算机科学中,为了高效地存储和操作图,我们通常会使用不同的数据结构来表示图。其中,邻接表是一种常用的...
在“C语言数据结构邻接表课程设计”中,我们将深入探讨如何利用C语言实现数据结构中的邻接表,这是图论中一个重要的抽象概念。邻接表是表示图的有效方式,尤其对于稀疏图(边的数量远小于顶点数量的平方)来说,它的...
在计算机科学中,我们通常使用两种主要的方法来存储图:邻接矩阵和邻接表。这两种方法各有优缺点,适用于不同的场景。 ### 邻接矩阵 **邻接矩阵** 是一种直观的图存储方式,它使用一个二维数组来表示图中的边。...
本作业主要探讨如何将NFA转换为DFA,并通过数据结构——邻接表来实现这一过程。 非确定性有限自动机(NFA)是一种允许存在多种转移路径的自动机,它在读取输入符号时可以有多个可能的状态转移。NFA通常用五元组 (Q,...
/*以下定义邻接表类型*/ typedef struct ANode /*弧的结点结构类型*/ { int adjvex; /*该弧的终点位置*/ struct ANode *nextarc; /*指向下一条弧的指针*/ InfoType info; /*该弧的相关信息,这里用于存放权值*/ }...
邻接表法建立图程序代码 邻接表法是图的存储结构之一,通过建立邻接表来存储图的信息。在这里,我们将详细介绍邻接表法建立图程序代码的知识点。 图的定义 在图论中,图是由节点和边组成的。节点是图的基本元素,...
### 图的邻接表存储与C语言实现:深入解析 #### 核心概念与背景 在数据结构领域,图是一种非常重要的非线性数据结构,它由顶点集(Vertex Set)和边集(Edge Set)组成。在图中,顶点代表数据对象,而边则表示这些...
领会图的两种主要存储结构、图基本运算算法和两种遍历算法设计内容:编写一个程序,设计带权图的邻接矩阵与邻接表的创建和输出运算,并在此基础上设计一个主程序完成如下功能:(1)建立如图所示的有向图G的邻接矩阵...
### 数据结构:图的邻接表存储 #### 一、引言 在计算机科学中,图是一种非线性数据结构,由顶点集合V和边集合E组成,表示为G=(V,E)。图可以用来表示各种各样的关系,如社交网络中的朋友关系、互联网中的网页链接等...
函数`DispMat`用于打印邻接矩阵,`MatToList`将邻接矩阵转换为邻接表,`DispAdj`显示邻接表,而`ListToMat`则将邻接表转换回邻接矩阵。这些函数的实现涉及到动态内存分配、遍历矩阵和链表等基本操作。 在实际编程中...
在C++中,图的常见实现方式之一是邻接表。本项目提供了一个C++实现的邻接表,能够处理有向图和无向图,并且使用了类模板来增强代码的通用性。以下是对这个项目的详细解释: 首先,邻接表是一种存储图的有效方式,...
根据给定文件的信息,我们可以总结出以下关于图的邻接表存储及遍历操作的关键知识点: ### 一、邻接表的基本概念 邻接表是一种用于表示图的存储结构,适用于稀疏图(即边的数量远小于顶点数量的平方)。它通过一...
完成“数据结构作业 邻接表”可能涉及以下内容:理解图的概念、邻接表的结构、如何用代码实现邻接表、以及如何使用邻接表进行DFS和BFS。通过这项作业,你可以深入理解数据结构的重要性,并提高解决实际问题的能力。...
图的邻接表是一种常用的图数据结构,它用于高效地表示图中的顶点和边。在邻接表中,每个顶点都有一个链表,链表中的元素代表与该顶点相连的所有边。这种结构特别适合处理稀疏图,即边的数量远小于顶点数量平方的图。...
### 邻接表Prim算法知识点解析 #### 一、Prim算法概述 Prim算法是一种用于寻找加权无向图中的最小生成树(Minimum Spanning Tree, MST)的算法。所谓最小生成树,是指在一个连通的加权无向图中找到一棵包含所有顶点...