数据结构—稀疏数组和二维数组互换

数据结构实践:矩阵与稀疏矩阵应用详解 矩阵是数学中的一个重要概念,它是由m行n列的数构成的有序排列,记为m×n矩阵,可以表示为:...其中,a_{ij}是矩阵中的元素,位于第i行第j列。矩阵可以表示线性变换、系统状态、数据关系等。在科学计算和工程应用中,矩阵作为重要的数据结构被广泛使用。当矩阵中大部分元素为零时,我们称之为稀疏矩阵。稀疏矩阵的“稀疏性”具体指的是什么呢?一个稀疏矩阵的判定标准通常是零元素的数量超过非零元素的数量,且这种结构的矩阵在内存中的存储和运算效率较低,若采用传统的二维数组存储,则会造成极大的资源浪费。 阅读详情

二维数组转换为稀疏数组

二维数组:11x11
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
稀疏数组:3x3
no row col val
0 11 11 2
1 1 2 3
2 2 3 2

思路

  1. 遍历原始的二维数组,得到有效数据个数sum
  2. 根据sum就可以直接创建稀疏数组sparseArr int[sum+1][3]
  3. 将二维数组的有效数据存入到稀疏数组
二话不说先上效果图

在这里插入图片描述

代码实现

		// 创建一个原始的二维数组11*11
		// 0:表示没有棋子 1表示黑子 2表示蓝子
		int chessArr1[][] = new int[11][11];
		chessArr1[1][2] = 1;
		chessArr1[2][3] = 2;
		chessArr1[4][5] = 2;

		// 输出原始二维数组
		System.out.println("输出原始二维数组");
		for (int[] row : chessArr1) {
			for (int data : row) {
				System.out.printf("%d\t", data);
			}
			System.out.println();
		}
		// 将二维数组转为稀疏数组
		// 1.先遍历二维数组得到非0数据的个数
		int sum = 0;
		for (int i = 0; i < 11; i++) {
			for (int j = 0; j < 11; j++) {
				if (chessArr1[i][j] != 0)
					sum++;
			}
		}
		// 2.创建稀疏数组
		int sparseArr[][] = new int[sum + 1][3];
		// 给稀疏数组赋值
		sparseArr[0][0] = 11;
		sparseArr[0][1] = 11;
		sparseArr[0][2] = sum;
		// 遍历二维数组将非0的值存放到稀疏数组
		int count = 0;// count用于记录是第几个非0数据
		for (int i = 0; i < 11; i++) {
			for (int j = 0; j < 11; j++) {
				if (chessArr1[i][j] != 0) {
					count++;
					sparseArr[count][0] = i;
					sparseArr[count][1] = j;
					sparseArr[count][2] = chessArr1[i][j];
				}
			}
		}

		// 输出稀疏数组的形式
		System.out.println();
		System.out.println("得到的稀疏数组为");
		for (int i = 0; i < sparseArr.length; i++) {
			System.out.printf("%d\t%d\t%d\t\n", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);
		}
		System.out.println();

稀疏数组转换为二维数组

思路

  1. 先读取稀疏数组的第一行,根据第一行的数据创建原始二维数组,如chessArr2=int[11][11]
  2. 在读取稀疏数组的后几行,并赋值给原始的二维数组即可。
二话不说先上效果图

在这里插入图片描述

代码实现

// 将稀疏数组 恢复成 原始的二维数组
		/*
		 * 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组 
		 * 2.在读取稀疏数组后几行数据,并赋值给原始的二维数组即可。
		 */
		// 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
		int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];

		// 2.在读取稀疏数组后几行数据,并赋值给原始的二维数组即可。
		for (int i = 1; i < sparseArr.length; i++) {
			chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
		}

		// 输出恢复后的二维数组
		System.out.println();
		System.out.println("恢复后的二维数组");

		for (int[] row : chessArr2) {
			for (int data : row) {
				System.out.printf("%d\t", data);
			}
			System.out.println();
		}

代码整合

效果图
在这里插入图片描述

package com.sparsearray;

public class SparseArray {

	public static void main(String[] args) {
		// 创建一个原始的二维数组11*11
		// 0:表示没有棋子 1表示黑子 2表示蓝子
		int chessArr1[][] = new int[11][11];
		chessArr1[1][2] = 1;
		chessArr1[2][3] = 2;
		chessArr1[4][5] = 2;

		// 输出原始二维数组
		System.out.println("输出原始二维数组");
		for (int[] row : chessArr1) {
			for (int data : row) {
				System.out.printf("%d\t", data);
			}
			System.out.println();
		}
		// 将二维数组转为稀疏数组
		// 1.先遍历二维数组得到非0数据的个数
		int sum = 0;
		for (int i = 0; i < 11; i++) {
			for (int j = 0; j < 11; j++) {
				if (chessArr1[i][j] != 0)
					sum++;
			}
		}
		// 2.创建稀疏数组
		int sparseArr[][] = new int[sum + 1][3];
		// 给稀疏数组赋值
		sparseArr[0][0] = 11;
		sparseArr[0][1] = 11;
		sparseArr[0][2] = sum;
		// 遍历二维数组将非0的值存放到稀疏数组
		int count = 0;// count用于记录是第几个非0数据
		for (int i = 0; i < 11; i++) {
			for (int j = 0; j < 11; j++) {
				if (chessArr1[i][j] != 0) {
					count++;
					sparseArr[count][0] = i;
					sparseArr[count][1] = j;
					sparseArr[count][2] = chessArr1[i][j];
				}
			}
		}

		// 输出稀疏数组的形式
		System.out.println();
		System.out.println("得到的稀疏数组为");
		for (int i = 0; i < sparseArr.length; i++) {
			System.out.printf("%d\t%d\t%d\t\n", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);
		}
		System.out.println();

		// 将稀疏数组 恢复成 原始的二维数组
		/*
		 * 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组 
		 * 2.在读取稀疏数组后几行数据,并赋值给原始的二维数组即可。
		 */
		// 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
		int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];

		// 2.在读取稀疏数组后几行数据,并赋值给原始的二维数组即可。
		for (int i = 1; i < sparseArr.length; i++) {
			chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
		}

		// 输出恢复后的二维数组
		System.out.println();
		System.out.println("恢复后的二维数组");

		for (int[] row : chessArr2) {
			for (int data : row) {
				System.out.printf("%d\t", data);
			}
			System.out.println();
		}

	}

}

Comsol超声空化气泡仿真入门:从零搭建模型到网格划分的完整流程 本文详细介绍了使用Comsol进行超声空化气泡仿真的完整流程,从物理基础理解到模型搭建、网格划分及求解器设置。通过具体步骤和示例代码,帮助初学者和工程师快速掌握这一关键技术,应用于医疗设备和工业清洗等领域。 阅读详情

相关推荐

SpringBoot+Vue实现图片上传

SpringBoot+Vue实现图片上传

叶♥璃 2730

java二维数组行列互换_Java数据结构和算法(2)之稀疏数组

1.定义 稀疏数组可以看做是普通二位数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组,关于稀疏数组的运用有五子棋盘,地图等.. *当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组如图2.好处 * 原数组中存在大量的无效数据,占据了大量的存储空间,真正有用的数据却少之又少*把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 *...

weixin_39574943的博客 102

STM32F103 CAN通信避坑指南:从标准库配置到收发测试的完整流程

本文详细介绍了STM32F103 CAN通信的实现流程,从标准库配置到收发测试,帮助开发者避开常见陷阱。内容涵盖硬件连接、波特率计算、过滤器配置及错误处理等关键环节,提供实用的代码示例和调试技巧,确保CAN通信的稳定性和可靠性。

weixin_30627341的博客 324

java二维数组行列互换_JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

一、基本简介1、基础概念在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。2、处理方式1)、记录数组一共有几行几列,有多少个不同的值2)、把具有不同值的元素的行列及值记录在稀疏数组中,可以缩小程序代码的复杂度。3、图解描述稀疏数组表...

weixin_39983404的博客 267

告别OFDM卡顿:用MATLAB手把手仿真AFDM波形,搞定高铁、无人机通信的时变信道难题

本文详细介绍了如何使用MATLAB仿真AFDM波形,解决高铁和无人机通信中的时变信道难题。通过仿射变换技术,AFDM在多普勒频移严重的场景下表现优异,显著提升通信质量。文章包含参数配置、波形生成、性能对比等实战内容,适合通信工程师和研究人员参考。

weixin_27014595的博客 318

BMS短路测试避坑指南:从炸管到稳定,我是如何搞定MOS管和TVS的

本文详细记录了BMS短路测试中MOS管和TVS的优化过程,从驱动电阻调整、PCB寄生参数控制到TVS选配策略,提供了一套实用的调试方法论。通过实战案例解析,帮助工程师避免常见陷阱,实现稳定可靠的短路测试性能。

weixin_30652897的博客 140

二维数组和稀疏数组互换

public class SpareArray { public static void main(String[] args) { //创建一个原始数组 11*11 int chessArr[][] = new int[11][11]; chessArr[1][2] = 1; chessArr[2][3] = 2; chessArr[4][5] = 2; //输出原始的二维数组 Sy.

大数据 225

Codex,Copilot 是什么

GitHub Copilot是什么 **GitHub Copilot** 是一款由 **GitHub** 和 **OpenAI** 合作开发的 **AI 代码辅助工具**,它基于 **OpenAI Codex 技术**,能够根据上下文自动生成代码建议,大幅提升编程效率

ZhangJiqun&191cm&85kg 6744

数据结构与算法day02-稀疏数组与二维数组互换(五子棋问题)

基本介绍: 当一个数组中大部分元素为0,或者为同一个值的数组时, 可以使用稀疏数组来保存该数组 编写的五子棋程序中,有存盘退出和续上盘的功能 分析问题: 因为该二维数组的很多值是默认值0,因此**记录了很多没有意义的的数据**,需要使用到 稀疏数组来压缩数据大小 稀疏数组的处理方法是(如下图所示): 1.记录数组一共有几行几列,有多少个不同的值 2.把具有不同值的元素的行列及值记录在一个小规模的数组中(小规模数组指稀疏数组), 从而缩小程序的规模。 结果:从6*7=42大小的规模的二

深耕java的博客 309

新手必看!手把手教你如何在飞牛NAS上玩转Docker容器!(飞牛Nas(fnOS)如何创建Docke容器以及Compose部署项目)

新手必看!手把手教你如何在飞牛NAS上玩转Docker容器!(飞牛Nas(fnOS)如何创建Docke容器以及Compose部署项目)

XiaoqiangClub的博客 1万+

信奥赛C++提高组csp-s之线段树详解

信奥赛C++提高组csp-s之线段树详解

王老师青少年编程 925

数据结构(10)— 数组、稀疏矩阵

数据结构(10)— 数组、稀疏矩阵(mi6236)一、数组数组是具有相同类型的变量,其中各个元素共用一个数组名,但是有不同的下标来访问。对于二维数组来说,给定维数和下标,如何得到数组元素存储位置?设每个数组占用1个内存单元,则二维数组Amn按行优先顺序(下标从1开始),aij的地址为:LOC(aij)=LOC(a11)+((i-1)*n+(j-1))*1。二维数组Amn按列优先顺序(下

2315

使用rknn进行facenet部署

修改facenet网络的forward函数代码。

如果想成为中心,那么就到中心去吧。 1042

【Java数据结构与算法】二维数组与稀疏数组

二维数组与稀疏数组的互换: 图片来源于 尚硅谷Java数据结构与java算法 /* 五子棋棋盘 大小:11*11 0:没有棋子 1:黑子 2:白子 */ public class SparseArray { public static void main(String[] args) { // 创建 二维数组 11* 11 int[][] array = new int[11][11]; // 给对应位置赋值 array[1]

qq_45896301的博客 182

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据结构复习(数组 和矩阵)

选择题 数组通常具有的两种基本操作是( ) A 建立和删除 B 索引和修改 C 查找和修改 D 查找和索引 稀疏矩阵的压缩存储方法是只存储( ) A 非零元素 B 三元组(i,j,aij) C aij D i,j 对稀疏矩阵进行压缩存储是为了( )。 A 降低运算时间 B 节约存储空间 C 便于矩阵运算 D 便于输入和输出 已知二维数组A8X10,按行存储时,元素a12的地址为1000,每个元素占2个字节,则元素a00的地址为( ) A 972 B 974 C 976 D 978 稀疏矩阵一般的压缩存储方法

努力的程序员 2674

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据结构之数组

(1) 数组的概念 由一组类型相同的数据元素构成的有限序列,且该有限序列存储在一块地址连续的内存单元中。 (2) 一维数组是线性表 A=(a1,a2,…an) 其中,每个元素都是一个单元素。 (2) 一维数组是线性表 A=(a1,a2,…an) 其中,每个元素都是一个单元素。 (3) 二维数组是线性表吗? Am×n二维数组的阵列表示形式如下: 矩阵Am×n可以看成n个列向量的线性表 矩阵Am×n可以看成m个行向量的线性表 即二维数组是“数据元素为一维数组”的线性表。 ai,j有两个线性关系约束,aij既

学习日常分享 1070

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java数据结构——稀疏矩阵、数组模拟队列、单链表、双向链表、单向环形链表

文章目录线性结构:非线性结构:稀疏数组和队列: 数据结构包括线性结构和非线性结构。 线性结构: (1)线性结构作为最常见的数据结构,其特点是数据元素之间存在一对一的线性关系; (2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为线性表,顺序表中的存储元素是连续的; (3)链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素预计相邻元素的地址信息; (4)线性结构常见的有:数组、队列、链表和栈。 非线性结构: 非线性结构包括:二维数组、多维数组,广

deku1018的博客 404

数据结构复习(5.数组和广义表)

数组的逻辑结构同样属于线性结构 已经学过的线性表:数据元素都是非结构的原子类型 数组和广义表的特点:一种特殊的线性表。 ① 元素的值并非原子类型,可以再分解,表中元素也是一个线性表(即广义的线性表)。即数据元素本身也是一个数据结构。 ② 所有数据元素仍属同一数据类型。 5.1数组的定义 一个m×n的二维数组可以看成是:m行的一维数组,或者n列的一维数组。 一个n维数组可以看成是由若干个n-1维数组组成的线性表。 5.2数组的顺序表示和实现 问题:计算机的存储结构是一维的,而数组..

qq_53635710的博客 1322

数据结构笔记5数组

数据结构笔记5数组 前言 数据结构笔记4串 写一下数组的笔记。 思维框架图 习题 选择题 \7. 设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( ) A.13 B.33 C.18 D.40 \8. 假设以行序为主序存储二维数组A=array[1…100,1…100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=( ) A.808 B.818 C.1010 D.1020

wsdchong的博客 1883

用三元组存储稀疏矩阵并实现转置

基本概念 在学习线性代数的时候,经常用到矩阵。在C语言中,表示矩阵的最直观形式就是二维数组。然而在实际应用中,很多高阶矩阵中的非零元素非常少,这个时候如果继续使用二维数组存储,那么就会浪费很多存储空间。          在数据结构中,我们用三元组存储稀疏矩阵。三元组定义为(i,v,j),这三个值一次表示矩阵的行、列、值。

4万+

【数据结构】数组和广义表(5)-知识点与例题

数组和广义表可看作是一种扩展的线性数据结构,其特殊性不像栈与队列那样反映在对数据结构的操作受限方面。而是反映在数据元素的构成上。

登登的博客 是温馨的小屋。 2720

数据结构——特殊矩阵

在线性代数里面,我们已经学过什么叫作方阵,即列数和行数相等的矩阵。对于特殊的方阵,我们不必将每一个元素都保存下来,在说这些矩阵之前,我们先来讲两种数组结构。

cdz2470的博客 5687

算法一 稀疏数组

目的:二维数组中很多值是零,没有意义,所以就要减少程序的规模,即转换为稀疏数组 做法:稀疏数组模型: 例如: 先找原数组中有几个有效数据 : 8 注意:按数组中得索引计入 ① ② ③ ① 行 列 值 ② 4 0 91 ③ 1 1 11 . . ⑧ 代码实现: 原始数组和稀疏数组互换: 1.先计...

weixin_52349266的博客 108

数据结构复习之多维数组与矩阵

多维数组与矩阵知识点多维数组和运算定义顺序存储二维存储位置计算三维数组存储位置数组转换置算法实现矩阵的压缩存储对称矩阵三角矩阵稀疏矩阵三元组表来存储稀疏实例一般㔹置算法快速转置算示带行表的三元组表 一种比特殊的数据结构。 知识点 多维数组和运算 定义 1、一维数组 是一种元素个数固定的线性表。 2、多维数组 是一种复杂的数据结构,可以看成是线性表的推广,一个n维数组可视为其数据元素为n-1维数组的线性表。 顺序存储 二维数组可有两种存储方法:一种是以行序为主序的存储方式,另一种是以列序为主序的存储方式。在C

guangod的博客 2048

第十二章 数据结构 数组和广义表 + 矩阵的存储 + 稀疏矩阵 + 三元组转置的代码实现

数组 数组的定义,特点及顺序存储 线性表的推广- 数组 数组是我们熟悉的数据结构,可以把数组看作是线性表的推广。 数组的特点是结构中的元素本身可以是具有某种结构的数据, 但属于同一数据类型。 以一维数组为基础, 可以这样观察。 将二维数组看成数据元素是一维数组的一维数组。 将三维数组看成元素是二维数组的一维数组。 n维数组中, 每个数据元素受n个关系的约束。 一般来说, 在数组上不能做插入, 删...

weixin_43960370的博客 1392

数据结构系列(五)-多维数组

本篇介绍数据结构-多维数组 思维导图 多维数组 数组的顺序存储 按行优先顺序:将数组元素按行向量排列,第 i+1 个行向量紧接在第 i 个行向量后面。 【例】二维数组 A mn 的按行优先存储的线性序列为: a11 ,a12 ,…,a1n ,a21 ,a22,…,a2n ,……,am1 ,am2 ,…,amn 按列优先顺序:将数组元素按列向量排列,第 i+1 个列向量紧...

碌星 1439
上一篇: 递归
下一篇: 数据结构—树
lu_long
博客等级 码龄8年 11粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值