day37--十字链表
而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--十字链表相关推荐
- 稀疏矩阵十字链表表示
类型定义 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #define MAX 100 /*稀疏矩 ...
- noj数据结构稀疏矩阵的加法十字链表_数据结构学习(C )稀疏矩阵(十字链表1)
CSDN 先说说什么叫稀疏矩阵. 你说, 这个问题很简单吗, 那你一定不知道中国学术界的嘴皮子仗, 对一个字眼的"抠"将会导致两种相反的结论.这是清华 2000 年的一道考研题:& ...
- 【swjtu】数据结构实验5_基于十字链表的稀疏矩阵转置
实验内容及要求: 编写程序,从字符文件读入三个正整数m, n, t以及t个三元组(i, j, e)建立稀疏矩阵的十字链表存储结构.其中,m.n分别表示矩阵行数和列数:i, j为非零元素行号和列号.编 ...
- 图十字链表并求度c语言,利用十字链表存储树结构(便于同时求出某一点的入度与出度)------C语言实现...
#include #include #include /* 利用十字链表存储有向图,可用于同时查找某个顶点的出度与入度: */ typedef struct edge{//顶点表 int headve ...
- 稀疏矩阵的三元组表与十字链表存储
三元组表:存储稀疏矩阵的非零元素,以及该元素所在的行.列信息,极大的节省了空间(如相比于一般的二维数组的存储),而且三元组表的某些算法的时间效率也要优于经典算法,如基于三元组表的一次快速转置算法等等 ...
- C++ 十字链表图转java版
C++ 图 #include <iostream> #include <string> #include <queue> #include <stack> ...
- 第八周实践项目10 稀疏矩阵的十字链表表示
#include <stdio.h> #include <malloc.h> #define M 3 //矩阵行 #define N 3 //矩阵列 #define Max ( ...
- 经典算法题每日演练——第二十一题 十字链表
上一篇我们看了矩阵的顺序存储,这篇我们再看看一种链式存储方法"十字链表",当然目的都是一样,压缩空间. 一:概念 既然要用链表节点来模拟矩阵中的非零元素,肯定需要如下5个元素(ro ...
- 稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示
typedef struct OLNode{ int i,j; //该非零元的行列下标 ElemType e; struct OLNode *right ...
- 十字链表计算矩阵乘积 c语言,求用十字链表实现矩阵相加算法(C语言)急!!!...
匿名用户 1级 2010-02-09 回答 我有一个可以用的.怎么给你?百度hi我吧. 算了,我贴上来吧,由电脑编程网整理: #include #include #define smax 45 typ ...
最新文章
- aml linux 环境,各位辛苦编译DSDT.aml的兄弟,linux是个好工具啊,简单提取
- 最新以及历史各版本 .NET Framework 的下载
- 什么是python函数_什么是python函数
- 监控linux内存,linux 监控系统资源-内存
- OpenJudge NOI 1.5 25:求特殊自然数
- day30 java的IO流(3)
- 【kafka】支持超高并发的kafka网络设计
- oracle手注,oracle手注
- Homebrew 插件自启动
- 二路归并排序C++实现
- 安装VMware16教程
- matlab常用开头,在MATLAB编辑中,以“”开头的表示()。
- SpringBoot02
- c语言指针重合,时钟指针重合问题的公式
- Linux——vi编辑器及文件内容操作
- “我等了三年,就是想等一个机会!” 谈谈数据团队如何为自己争取资源!
- 我做的一个Android 下的PDF书架阅读APP
- 文件查找工具Everything的上下文菜单配置
- 常见的HTTP网络状态码汇总+HttpServletResponse源码
- 如何将mongo查询结果导出到文件中以及导入到另一个Mongo库中