数据结构Java版之邻接表实现图(十)

  邻接表实现图,实际上是在一个数组里面存放链表,链表存放的是连接当前节点的其他节点。

  

package mygraph;

import java.util.ArrayList;
import java.util.List;

public class Table {
    private List<List<Character>> list;
    private List<Character> headNodes;
    private int n;
    private int nVerts;
    //出始化链表
    public Table() {
        super();
        this.list = new ArrayList<List<Character>>();
        this.headNodes = new ArrayList<Character>();
        list.add(new ArrayList<Character>());
        list.add(new ArrayList<Character>());
        list.add(new ArrayList<Character>());
        list.add(new ArrayList<Character>());
    }
        //添加一个节点
    public void addVertx(char x) {
        headNodes.add(x);
    }
        //添加一条边
    public void addEdge(int start, int end) {
        list.get(start).add(headNodes.get(end));
        list.get(end).add(headNodes.get(start));
    }

    //打印节点
    public  void printVertice() {
        for(List ls :list) {
            for(Object i : ls) {
                System.out.print(i + "\t");
            }
            System.out.println();
        }
    }

}    

测试程序:

    public static void main(String[] args) {
        Table t = new Table();
        t.addVertx(‘a‘);        //0
        t.addVertx(‘b‘);        //1
        t.addVertx(‘c‘);        //2
        t.addVertx(‘d‘);        //3
        t.addEdge(0, 2);
        t.addEdge(0, 1);
        t.printVertice();    //0- b c    //1- a    //2- a
    }

测试结果:

c    b    //a-c  a-b
a       //b-a
a       //c-a

原文地址:https://www.cnblogs.com/ranter/p/9249993.html

时间: 2024-10-07 16:10:33

数据结构Java版之邻接表实现图(十)的相关文章

图论——图的邻接表实现——Java语言(完整demo)

1.图的简单实现方法--邻接矩阵 表示图的一种简单的方法是使用一个一维数组和一个二维数组,称为领接矩阵(adjacent matrix)表示法. 对于每条边(u,v),置A[u,v]等于true:否则,数组的元素就是false.如果边有一个权,那么可以置A[u][v]等于该权,而使用一个很大或者很小的权来标记不存在的边.虽然这样表示非常简单,但是,它的空间需求则为θ(|V|2),如果图的边不是很多,那么这种表示的代价就太大了.若图是稠密(dense)的:|E|=θ(|V|2),则领接矩阵是合适的

JAVA邻接表实现拓扑排序

由于一直不适用邻接表 ,现在先贴一段使用邻接矩阵实现图的拓扑排序以及判断有无回路的问题.自己做的图.将就看吧. package TopSort; import java.util.LinkedList; import java.util.Scanner; /*拓扑序列:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性 * 序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前. * */ p

数据结构Java版之深度优先-图(十二)

这里用深度优先遍历存在矩阵里面的图. 深度优先利用的是栈的FIFO特性.为此遍历到底后,可以找到最相邻的节点继续遍历.实现深度优先,还需要在节点加上一个访问标识,来确定该节点是否已经被访问过了. 源码: package mygraph; import java.util.Stack; public class DFS_Vertex { //创建一个我们需要的节点类 class Vertex { private char lable; private int val; private boolea

数据结构 Java版二叉排序树

二叉搜索树,又称为二叉查找树和二叉搜索树.它或者是一颗空树,或者具有下列性质的二叉树. 1 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值. 2 若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值. 3 它的左.右子树也都为二叉搜索树. 构造一颗二叉搜索树,目的不是为了排序,而是为了提高查找.插入和删除关键字的速度.一个有序数据集上的查找速度总是要快于无序数据集,而二叉搜索树这种非线性的结构,也有利于插入和删除的实现. 二叉搜索树的查找性能取决于二叉搜索树的形状,问

用邻接表实现某个点入度和出度

#include <cstdio> #include <cstring> #include <cctype> using namespace std; typedef struct node{//邻接表上的节点 int n; struct node * next; } GNode; typedef struct graph{//图的整个结构 int cn;//顶点个数 int bn;//边的个数 GNode *list;//顶点的数组相当于list[]; }Graph;

用邻接表实现无向图的创建与输出

1 #include<stdio.h> 2 #include <iostream> 3 #include<algorithm> 4 using namespace std; 5 #define MVNum 100 6 typedef struct ArcNode // 边表结点 7 { 8 int adjvex; // 邻接点域,存储该顶点对应的下标 9 //int info; //用于存储权值,对于非网图可以不需要 10 struct ArcNode *nextarc

数据结构Java版之遍历二叉树(六)

二叉树是我们在程序中用的最多的一种树(个人观点).最简单的一个二叉树是由一个根节点,两个子节点(一左一右成左右孩子节点)组成.二叉树是数组和链表的结合,即包含了数组的快速查找优点,又包含了链表的快速添加删除的优点.熟练掌握二叉树的遍历方法是很有必要的.下面来介绍一下基于二叉树的四种遍历方式. 下面我们以一个棵简单的二叉树为例来说明四种遍历: 创建树节点类: //树节点 class TreeNode { public char val; public TreeNode left; public T

数据结构Java版之查找算法(三)

关于查找算法,这里只进行两个算法的说明.包括 顺序查找 和 折半查找. 顺序查找: 顺序查找常用于未排序的数据中.查找速度较慢,只能应用于较小的数据量. public int sequentialSearch(int[] list, int ele) { for(int i = 0; i < list.length; i ++) { if(ele == list[i]) return i; } return -1; } 折半查找: 比较快的查找算法,但也仅限于对排好序的数据进行查找. publi

数据结构Java版之红黑树(八)

红黑树是一种自动平衡的二叉查找树,因为存在红黑规则,所以有效的防止了二叉树退化成了链表,且查找和删除的速度都很快,时间复杂度为log(n). 什么是红黑规则? 1.根节点必须是黑色的. 2.节点颜色要么是红要么是黑. 3.树的每一个分叉存在相同黑色节点. 4.不允许存在两个连续的红色节点. 为不断适应红黑规则,在写程序中如何调整? 1.旋转 ---单旋转 外侧节点单旋转.外侧节点指的是左子树的左孩子节点,右子树的右孩子节点. ---双旋转 内侧节点双旋转.内侧节点指的是左子树的右孩子节点,右子树