数据结构java稀疏矩阵_数据结构之十字链表——稀疏矩阵的链式存储及加法运算...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
以下简单实现了数据结构中的十字链表(Java实现):代码为添加(add)方法及求和(sum)方法,其它方法后续有时间再添加,最下面有测试方法
CrossList交叉链表实现代码如下:
package com.shxt.tengfei.metadata;
public class CrossList {
private Element base = null; //0元素
private int rowSize = 0;
private int columnSize = 0;
private int size = 0;
public CrossList() {
base = new Element(0, 0, null, null, null);
}
public int size() {
return size;
}
public void add(int row, int column, T d) {
Element rowTemp = base;
if (row > rowSize) {
while (rowTemp.down != null) {
rowTemp = rowTemp.down;
}
int newEleSize = row - rowSize;
for (int i = 0; i < newEleSize; i++) {
rowSize++;
Element newRowBase = new Element(rowSize, 0, null, null, null);
rowTemp.down = newRowBase;
rowTemp = rowTemp.down;
}
} else {
for (int i = 0; i < row; i++) {
rowTemp = rowTemp.down;
}
}
Element columnTemp = base;
if (column > columnSize) {
while (columnTemp.right != null) {
columnTemp = columnTemp.right;
}
int newEleSize = column - columnSize;
for (int i = 0; i < newEleSize; i++) {
columnSize++;
Element newColumnBase = new Element(0, columnSize, null, null, null);
columnTemp.right = newColumnBase;
columnTemp = columnTemp.right;
}
} else {
for (int i = 0; i < column; i++) {
columnTemp = columnTemp.right;
}
}
Element newEle = new Element(row, column, d, null, null);
if (rowTemp.right == null) {
rowTemp.right = newEle;
} else {
Element rightEle = rowTemp.right;
while (true) {
if (newEle.column < rightEle.column) {
newEle.right = rightEle;
rowTemp.right = newEle;
break;
}
else if (rightEle.right == null) {
rightEle.right = newEle;
break;
}
else {
rowTemp = rightEle;
rightEle = rightEle.right;
}
}
}
if (columnTemp.down == null) {
columnTemp.down = newEle;
} else {
Element downEle = columnTemp.down;
while (true) {
if (newEle.row < downEle.row) {
newEle.down = downEle;
columnTemp.down = newEle;
break;
}
else if (downEle.down == null) {
downEle.down = newEle;
break;
}
else {
columnTemp = downEle;
downEle = downEle.down;
}
}
}
size++;
}
public int[][] toArray() {
Element tempRowBase = base;
int[][] elements = new int[rowSize][columnSize];
while (tempRowBase.down != null) {
tempRowBase = tempRowBase.down;
Element tempColumnBase = tempRowBase;
while (tempColumnBase.right != null) {
tempColumnBase = tempColumnBase.right;
String strValue = tempColumnBase.data == null ? "0" : "" + tempColumnBase.data;
int value = Integer.parseInt(strValue);
elements[tempColumnBase.row - 1][tempColumnBase.column - 1] = value;
}
}
return elements;
}
public void print(int[][] array) {
for (int[] tempRow : array) {
for (int temp : tempRow) {
System.out.print(temp + "\t");
}
System.out.println();
}
}
public CrossList sum(CrossList second) {
int[][] fa = this.toArray();
int[][] sa = second.toArray();
CrossList overList = new CrossList();
boolean bCross = false;
if (fa.length == sa.length) {
for (int i = 0; i < fa.length; i++) {
if (fa[i].length != sa[i].length) {
break;
}
for (int j = 0; j < fa[i].length; j++) {
fa[i][j] = fa[i][j] + sa[i][j];
overList.add(i+1, j+1, fa[i][j]);
}
}
bCross = true;
}
return bCross ? overList : null;
}
class Element {
int row;
int column;
D data;
Element down;
Element right;
public Element(int r, int c, D d, Element down, Element right) {
row = r;
column = c;
data = d;
this.down = down;
this.right = right;
}
public String toString() {
return "[" + row + "," + column + " --> " + data + "]";
}
}
}
》》》》》》》》》》》》》》》》》》》》》》》》》》测试代码如下:
package com.shxt.tengfei.metadata;
public class TestCross {
public static void main(String[] args) {
CrossList cross1 = new CrossList();
//check new base
cross1.add(1, 1, -88);
cross1.add(3, 3, 99);
//insert a element (不影响其他元素)
cross1.add(2, 2, 1000);
//影响其他位置元素
cross1.add(2, 3, -5);
cross1.add(2, 1, 777);
cross1.print(cross1.toArray());
System.out.println("====================== cross1 end ========================\n");
CrossList cross2 = new CrossList();
cross2.add(1, 1, -66);
cross2.add(2, 2, 500);
cross2.add(3, 3, 35);
cross2.print(cross2.toArray());
System.out.println("====================== cross2 end ========================\n");
//cross1和cross2求和
CrossList cross3 = cross1.sum(cross2);
if (cross3 != null) {
cross3.print(cross3.toArray());
}
System.out.println("====================== sum(+) end ========================\n");
}
}
数据结构java稀疏矩阵_数据结构之十字链表——稀疏矩阵的链式存储及加法运算...相关推荐
- 数据结构(四) -- C语言版 -- 线性表的链式存储 - 循环链表
文章目录 零.读前说明 一.循环链表的概述 二.循环链表的模型 2.1.包含头节点模型 2.2.不包含头节点模型 三.工程结构及简单测试案例 3.1.测试工程的目录结构 3.2.循环链表示例源码 3. ...
- 数据结构与算法2:线性表的顺序存储与链式存储
文章目录 线性表 定义 线性表的抽象数据类型(Abstract Data Type) 线性表的顺序存储结构 线性表的链式存储结构 单链表(single linked list) 静态链表 (stati ...
- 数据结构-线性表(链式存储结构)
线性表(链式存储结构) 特点: 用一组任意的存储单元存储线性表的数据结构,这组存储单元可以是连续的,也可以是不连续的. 对数据结构ai来说,除了存储其本身的信息之外,还需存储一个指示其后继的信息(即直 ...
- 数据结构之链表及其Java实现_数据结构之链表及其Java实现
数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...
- 数据结构之线性表-链式存储之单链表(一)
本人文笔较差,语文从来不及格,基础不好,写此类文章仅供自己学习,理解队列及其他知识,高手大神请略过.参考书籍 <数据结构与算法分析-Java语言描述> 1.1 单链表简介 线性表的最大的缺 ...
- 尚硅谷01 数据结构与算法_数据结构与算法介绍+稀疏数组
数据结构与算法的关系 几个实际编程中遇到的问题 要想写出优秀的算法,首先应该能读懂别人写好的算法. 将生活中遇到的实际问题,使用程序来解决 线性结构和非线性结构 线性结构和非线性结构的关系: 数据结构 ...
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
最新文章
- 云计算技术 — 云计算技术发展编年史
- python办公自动化excel_简直出神入化,教你用Python控制Excel实现自动化办公
- WebDataMenu做工具栏程序代码
- Socket 进行发送
- 初学Java Web(4)——Servlet学习总结
- JBoss7的启动时间
- 如何通过 C# kill 指定进程?
- HttpResponse对象
- SLAM的一些基础知识
- B站游戏大佬飘了?深挖B站辱北邮事件经过:不是第一次
- CI框架 -- 核心文件 之 Loader.php(加载器)
- Access数据库的查询
- wps怎么免费导出简历_简历模板Word文档 免费下载简历模板
- 安全生产:端正工作态度
- IE无法打开链接的处理方法
- 最好的Google表格插件
- 店宝宝:第一时间发布!网店店主必看
- android 加密手机功能,怎么为安卓手机加密
- 关于OPC Client 编写
- 从零开发区块链应用(十三)--以太坊区块查询
热门文章
- echarts 3d地图-成都
- Android一段时间无操作之后,进入广告轮播界面,以及触摸之后停止轮播
- Linux:详解talk服务的启用和talk命令使用
- 将Tomcat注册为系统服务教程(WIN10)
- HTA程序:VBS/JS脚本GUI
- ☀️在爬完一周的朋友圈后,我发现了.......惊人⚠️秘密
- java毕业生设计新城街道社区的健康档案管理平台计算机源码+系统+mysql+调试部署+lw
- Node.js 对比 Python:优点、缺点和用例
- 自学app难不难 有c语言,软件编程入门自学到底难不难 零基础自学软件编程的方法...
- js检查字符串字节长度