而nextIn则表示指向以该顶点为弧头的第一个弧节点。而nextOut则表示指向以该顶点为弧尾的第一个弧节点。
代码:

package com.three;public class OrthogonalList {/*** An inner class for adjacent node.*/class OrthogonalNode {/*** The row index.*/int row;/*** The column index.*/int column;/*** The next out node.*/OrthogonalNode nextOut;/*** The next in node.*/OrthogonalNode nextIn;public OrthogonalNode(int paraRow, int paraColumn) {row = paraRow;column = paraColumn;nextOut = null;nextIn = null;}// Of OrthogonalNode}// Of class OrthogonalNode/*** The numNodes;*/int numNodes;/*** The headers for each row.**/OrthogonalNode[] headers;public OrthogonalList(int[][] paraMatrix) {numNodes = paraMatrix.length;//Step 1. Initialize.OrthogonalNode tempPreviousNode,tempNode;headers = new OrthogonalNode[numNodes];//Step 2.Link to its out nodesfor (int i = 0; i < numNodes; i++) {headers[i]  = new OrthogonalNode(i,-1);tempPreviousNode = headers[i];for (int j = 0; j < numNodes; j++) {if (paraMatrix[i][j] == 0) {continue;}//create a new node.tempNode = new OrthogonalNode(i,j);//LinktempPreviousNode.nextOut = tempNode;tempPreviousNode = tempNode;}// of for j}// of for i//Step 3.Link to its in nodes. This step is harder.OrthogonalNode[] tempColumnNodes = new OrthogonalNode[numNodes];for (int i = 0; i < numNodes; i++) {tempColumnNodes[i] = headers[i];}// of for ifor (int i = 0; i < numNodes ; i++) {tempNode = headers[i].nextOut;while (tempNode != null) {tempColumnNodes[tempNode.column].nextIn = tempNode;tempColumnNodes[tempNode.column] =  tempNode;tempNode = tempNode.nextOut;}// of while}// of for i}// of constructorpublic String toString() {String resultString = "Out arcs: ";OrthogonalNode tempNode;for (int i = 0; i < numNodes; i++) {tempNode = headers[i].nextOut;while (tempNode != null) {resultString += " (" + tempNode.row + ", " + tempNode.column + ")";tempNode = tempNode.nextOut;} // Of whileresultString += "\r\n";} // Of for iresultString += "\r\nIn arcs: ";for (int i = 0; i < numNodes; i++) {tempNode = headers[i].nextIn;while (tempNode != null) {resultString += " (" + tempNode.row + ", " + tempNode.column + ")";tempNode = tempNode.nextIn;} // Of whileresultString += "\r\n";} // Of for ireturn resultString;}// Of toStringpublic static void main(String[] args) {int[][] tempMatrix = { { 0, 1, 0, 0 }, { 0, 0, 0, 1 }, { 1, 0, 0, 0 }, { 0, 1, 1, 0 } };OrthogonalList tempList = new OrthogonalList(tempMatrix);System.out.println("The data are:\r\n" + tempList);}
}

运行结果:

The data are:
Out arcs:  (0, 1)(1, 3)(2, 0)(3, 1) (3, 2)In arcs:  (2, 0)(0, 1) (3, 1)(3, 2)(1, 3)

day37--十字链表相关推荐

  1. 稀疏矩阵十字链表表示

    类型定义 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #define MAX 100 /*稀疏矩 ...

  2. noj数据结构稀疏矩阵的加法十字链表_数据结构学习(C )稀疏矩阵(十字链表1)

    CSDN 先说说什么叫稀疏矩阵. 你说, 这个问题很简单吗, 那你一定不知道中国学术界的嘴皮子仗, 对一个字眼的"抠"将会导致两种相反的结论.这是清华 2000 年的一道考研题:& ...

  3. 【swjtu】数据结构实验5_基于十字链表的稀疏矩阵转置

    实验内容及要求: 编写程序,从字符文件读入三个正整数m, n, t以及t个三元组(i, j, e)建立稀疏矩阵的十字链表存储结构.其中,m.n分别表示矩阵行数和列数:i,  j为非零元素行号和列号.编 ...

  4. 图十字链表并求度c语言,利用十字链表存储树结构(便于同时求出某一点的入度与出度)------C语言实现...

    #include #include #include /* 利用十字链表存储有向图,可用于同时查找某个顶点的出度与入度: */ typedef struct edge{//顶点表 int headve ...

  5. 稀疏矩阵的三元组表与十字链表存储

    三元组表:存储稀疏矩阵的非零元素,以及该元素所在的行.列信息,极大的节省了空间(如相比于一般的二维数组的存储),而且三元组表的某些算法的时间效率也要优于经典算法,如基于三元组表的一次快速转置算法等等 ...

  6. C++ 十字链表图转java版

    C++ 图 #include <iostream> #include <string> #include <queue> #include <stack> ...

  7. 第八周实践项目10 稀疏矩阵的十字链表表示

    #include <stdio.h> #include <malloc.h> #define M 3 //矩阵行 #define N 3 //矩阵列 #define Max ( ...

  8. 经典算法题每日演练——第二十一题 十字链表

    上一篇我们看了矩阵的顺序存储,这篇我们再看看一种链式存储方法"十字链表",当然目的都是一样,压缩空间. 一:概念 既然要用链表节点来模拟矩阵中的非零元素,肯定需要如下5个元素(ro ...

  9. 稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示

    typedef struct OLNode{ int  i,j;                 //该非零元的行列下标 ElemType    e; struct  OLNode    *right ...

  10. 十字链表计算矩阵乘积 c语言,求用十字链表实现矩阵相加算法(C语言)急!!!...

    匿名用户 1级 2010-02-09 回答 我有一个可以用的.怎么给你?百度hi我吧. 算了,我贴上来吧,由电脑编程网整理: #include #include #define smax 45 typ ...

最新文章

  1. 2019年美国国家人工智能战略报告(中文翻译版)
  2. 小程序爆红 专家:对简单APP是巨大打击
  3. using的几种用法 C#
  4. 在项目中使用react
  5. 2.5 数据不匹配时,偏差和方差的分析-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  6. HyperLedger Fabric链码开发及测试
  7. std::move C++11 标准新特性: 右值引用与转移语义
  8. Android数据存储与访问
  9. python字典求平均值_Python 3.4 – 如何获得字典值的平均值?
  10. 解决Docker容器时区不一致的问题
  11. C# 连接sql 2005
  12. 《Head First Servlets JSP》-11-Web应用部署
  13. 将2^n (n=1000000) 转化为10进制输出
  14. (附源码)springboot电子阅览室app 毕业设计 016514
  15. c语言求余的方法,c语言求余的实现方法_后端开发
  16. 一文2000字搞懂高并发性能指标:QPS、TPS、RT、并发数、吞吐量
  17. c语言大小写字母变换,C语言学习:任意大小写字母转换
  18. jmeter.results.shanhe.me.xsl
  19. VM 安装win10 失败
  20. 性别检测识别、年龄检测识别

热门文章

  1. 【VMware】VM安装虚拟机
  2. 马上2023年了,《北上广深杭》有哪些值得加入的软件测试大厂公司呢?花了三天三夜整理出各大互联网公司
  3. 《电脑爱好者》2017 年 01 -06期
  4. android录制mp3 github,GitHub - understanding/AndroidMP3Recorder: 为Android提供MP3录音功能[持续维护版]...
  5. MEET2022智能未来大会今日举行,李开复张亚勤上演巅峰对话
  6. 置信度和置信度区间理解
  7. 经典的自动修复工具GenProg配置过程
  8. SSM源码分析之Spring11-手写SpringORM
  9. 【金猿案例展】某大型电机公司——水电机组智能运维系统建设
  10. 每日新闻丨英伟达发布全球最小边缘AI超级计算机;IBM开发出全球首个金融服务就绪公有云...