【数据结构】图形的多种表示方法及其java实现之相邻表法
来源:互联网 发布:资源站源码 编辑:程序博客网 时间:2024/05/21 08:55
上一篇博文讲到用相邻矩阵法表示图形,该方法的优点是直观,访问方便,缺点是,当图形的规模庞大,节点数目很多时,有许多节点之间并无连接,这样就浪费了大量的存储空间。而相邻表法则解决了这一问题。
相邻表法只记录图形中存在的连接,也即只记录相邻矩阵中1的部分。
使用相邻表法表示的话,每个节点使用一张表,每张表包括一个表头和与该节点相连的其他节点,表头用来表征该表与哪个节点相对应。如上述无向图和有向图,用相邻表法分别表示如下:
生成相邻表的源代码如下:
package javaTest;public class GraphList {//列表类,每一个列表有n个链接类构成,n为节点的个数public static void main(String args[]){int[][] data1 = {{1,2},{2,1},{1,4},{4,1},{1,5},{5,1},{2,3},{3,2},{2,4},{4,2},{3,4},{4,3},{3,5},{5,3}};int[][] data2 = {{1,2},{1,5},{2,4},{3,2},{3,4},{4,1},{5,3}};System.out.println("The undirected graph expressed with link list:");new GraphList(data1);System.out.println();System.out.println("The directed graph expressed with link list:");new GraphList(data2);}public GraphList(int[][] data){int maxNodeValue = 0;for(int i=0; i<data.length; i++){//判断初始数据中提供的节点的个数for(int j=0; j<data[i].length; j++){if(maxNodeValue<data[i][j]){maxNodeValue = data[i][j];}}}GraphLink[] linkHead = new GraphLink[maxNodeValue+1];for(int i=1; i<linkHead.length; i++){linkHead[i] = new GraphLink();for(int j=0; j<data.length; j++){if(data[j][0]==i){linkHead[i].insert(data[j][1]);}}System.out.print("Node"+i+"->");linkHead[i].print();System.out.println();}}}class Node{//节点类int value;Node nextNode;public Node(int value){this.value = value;nextNode = null;}}class GraphLink{//链接类Node head;Node tail;public boolean isEmpty(){return head==null;}public void print(){//打印链接Node tempNode = head;while(tempNode != null){System.out.print("["+tempNode.value+"] ");tempNode = tempNode.nextNode;}}public void insert(int value){//往链接中插入节点Node tempNode = new Node(value);if(this.isEmpty()){head = tempNode;tail = tempNode;}else{tail.nextNode = tempNode;tail = tempNode;}}}程序输出:
The undirected graph expressed with link list:
Node1->[2] [4] [5]
Node2->[1] [3] [4]
Node3->[2] [4] [5]
Node4->[1] [2] [3]
Node5->[1] [3]
The directed graph expressed with link list:
Node1->[2] [5]
Node2->[4]
Node3->[2] [4]
Node4->[1]
Node5->[3]
0 0
- 【数据结构】图形的多种表示方法及其java实现之相邻表法
- 【数据结构】图形的多种表示方法及其java实现之相邻矩阵法
- 图论之图形的表示方法(二)- 相邻表法/邻接表法
- 图论之图形的表示方法(一)-数组表示法/相邻矩阵法/邻接矩阵法
- 数据结构之线性表的链式表示及其实现
- 数据结构之栈的链式表示及其实现
- 数据结构之队列的链式表示及其实现
- 数据结构之栈的顺序表示及其实现
- 数据结构之静态链表的游标表示及其实现(附完整代码)
- 多种数据结构的Java实现
- 数据结构之队列的顺序表示及其实现(循环队列)
- 多种数据结构的Java实现(精)
- 树的父节点表示法及其Java实现
- 树的子节点链表示法及其Java实现
- 数据结构学习----线性表的链式表示之升序排序的单链表(Java实现)
- 数据结构学习----线性表的链式表示之循环单链表(Java实现)
- 数据结构学习----线性表的链式表示之循环双链表(Java实现)
- 基本的数据结构及其表示
- 将具体的秒数转换为几天几小时几分钟
- 蓝桥杯 危险系数 DFS
- php面向编程入门之封装-继承-多态(第一部分)
- ebp与esp讲解
- html5的<meta>全部标签及作用
- 【数据结构】图形的多种表示方法及其java实现之相邻表法
- Android之ListView
- 设计模式之单一原则
- Opencv图像的遍历_at_ptr
- 弹出提示选择日期,地区,三级联动
- spring-boot(1) 拦截器
- 关于使用libcurl的注意事项
- FlexBoxLayout控件做流布局
- JavaScript 图形绘制库