该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

以下简单实现了数据结构中的十字链表(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稀疏矩阵_数据结构之十字链表——稀疏矩阵的链式存储及加法运算...相关推荐

  1. 数据结构(四) -- C语言版 -- 线性表的链式存储 - 循环链表

    文章目录 零.读前说明 一.循环链表的概述 二.循环链表的模型 2.1.包含头节点模型 2.2.不包含头节点模型 三.工程结构及简单测试案例 3.1.测试工程的目录结构 3.2.循环链表示例源码 3. ...

  2. 数据结构与算法2:线性表的顺序存储与链式存储

    文章目录 线性表 定义 线性表的抽象数据类型(Abstract Data Type) 线性表的顺序存储结构 线性表的链式存储结构 单链表(single linked list) 静态链表 (stati ...

  3. 数据结构-线性表(链式存储结构)

    线性表(链式存储结构) 特点: 用一组任意的存储单元存储线性表的数据结构,这组存储单元可以是连续的,也可以是不连续的. 对数据结构ai来说,除了存储其本身的信息之外,还需存储一个指示其后继的信息(即直 ...

  4. 数据结构之链表及其Java实现_数据结构之链表及其Java实现

    数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...

  5. 数据结构之线性表-链式存储之单链表(一)

    本人文笔较差,语文从来不及格,基础不好,写此类文章仅供自己学习,理解队列及其他知识,高手大神请略过.参考书籍 <数据结构与算法分析-Java语言描述> 1.1 单链表简介 线性表的最大的缺 ...

  6. 尚硅谷01 数据结构与算法_数据结构与算法介绍+稀疏数组

    数据结构与算法的关系 几个实际编程中遇到的问题 要想写出优秀的算法,首先应该能读懂别人写好的算法. 将生活中遇到的实际问题,使用程序来解决 线性结构和非线性结构 线性结构和非线性结构的关系: 数据结构 ...

  7. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...

    还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...

  8. 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)

    线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...

  9. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

最新文章

  1. 云计算技术 — 云计算技术发展编年史
  2. python办公自动化excel_简直出神入化,教你用Python控制Excel实现自动化办公
  3. WebDataMenu做工具栏程序代码
  4. Socket 进行发送
  5. 初学Java Web(4)——Servlet学习总结
  6. JBoss7的启动时间
  7. 如何通过 C# kill 指定进程?
  8. HttpResponse对象
  9. SLAM的一些基础知识
  10. B站游戏大佬飘了?深挖B站辱北邮事件经过:不是第一次
  11. CI框架 -- 核心文件 之 Loader.php(加载器)
  12. Access数据库的查询
  13. wps怎么免费导出简历_简历模板Word文档 免费下载简历模板
  14. 安全生产:端正工作态度
  15. IE无法打开链接的处理方法
  16. 最好的Google表格插件
  17. 店宝宝:第一时间发布!网店店主必看
  18. android 加密手机功能,怎么为安卓手机加密
  19. 关于OPC Client 编写
  20. 从零开发区块链应用(十三)--以太坊区块查询

热门文章

  1. echarts 3d地图-成都
  2. Android一段时间无操作之后,进入广告轮播界面,以及触摸之后停止轮播
  3. Linux:详解talk服务的启用和talk命令使用
  4. 将Tomcat注册为系统服务教程(WIN10)
  5. HTA程序:VBS/JS脚本GUI
  6. ☀️在爬完一周的朋友圈后,我发现了.......惊人⚠️秘密
  7. java毕业生设计新城街道社区的健康档案管理平台计算机源码+系统+mysql+调试部署+lw
  8. Node.js 对比 Python:优点、缺点和用例
  9. 自学app难不难 有c语言,软件编程入门自学到底难不难 零基础自学软件编程的方法...
  10. js检查字符串字节长度