而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. aml linux 环境,各位辛苦编译DSDT.aml的兄弟,linux是个好工具啊,简单提取
  2. 最新以及历史各版本 .NET Framework 的下载
  3. 什么是python函数_什么是python函数
  4. 监控linux内存,linux 监控系统资源-内存
  5. OpenJudge NOI 1.5 25:求特殊自然数
  6. day30 java的IO流(3)
  7. 【kafka】支持超高并发的kafka网络设计
  8. oracle手注,oracle手注
  9. Homebrew 插件自启动
  10. 二路归并排序C++实现
  11. 安装VMware16教程
  12. matlab常用开头,在MATLAB编辑中,以“”开头的表示()。
  13. SpringBoot02
  14. c语言指针重合,时钟指针重合问题的公式
  15. Linux——vi编辑器及文件内容操作
  16. “我等了三年,就是想等一个机会!” 谈谈数据团队如何为自己争取资源!
  17. 我做的一个Android 下的PDF书架阅读APP
  18. 文件查找工具Everything的上下文菜单配置
  19. 常见的HTTP网络状态码汇总+HttpServletResponse源码
  20. 如何将mongo查询结果导出到文件中以及导入到另一个Mongo库中

热门文章

  1. c# 陈景润 15 子问题
  2. 数据工程师数据分析师这两个岗位有什么区别?有没有发展前景?
  3. 对于机械键盘的一些见解(转载)
  4. 李炎恢bootstrap写首页内容上思路解析
  5. STC89C52RC 按键控制LED
  6. LoRa模块网络组成和架构原理是怎样的?
  7. 5分钟了解单片机数据、地址、控制总线结构
  8. 全球与中国信封夹市场前景动态与未来发展趋势报告2022-2028年
  9. word2007表格计算机,【word2007的表格怎么拆分?这个计算机技能别说你还不会】- 环球网校...
  10. 在Fedora 12上安装RealPlayer 11