数据结构与算法——稀疏数组

作者: C you again,从事软件开发 努力在IT搬砖路上的技术小白
公众号:C you again】,分享计算机类毕业设计源码、IT技术文章、游戏源码、网页模板、程序人生等等。公众号回复 【粉丝】进博主技术群,与大佬交流,领取干货学习资料
关于转载:欢迎转载博主文章,转载时表明出处
求赞环节:创作不易,记得 点赞+评论+转发 谢谢你一路支持

引言

   本篇介绍稀疏数组,二维数组与稀疏数组之间的相互转化,如果你需要了解其他数据结构,请点击下面链接查看!!!

了解更多:数据结构与算法目录整理

稀疏数组

一、稀疏数组的定义

  当一个数组(包括多维数组)中的大部分元素为0或者为同一个数值的数组时,为了节约空间起到压缩的效果,将数据用另一种结构来表示,即稀疏数组。
在这里插入图片描述

二、根据二维数组转稀疏数组

  1. 遍历二维数组,得出有效数据的个数 sum
  2. 根据有效数据的个数,确定稀疏数组 sparseArr[sum+1][3]
  3. 遍历二维数组,给稀疏数组赋值

/**
 *  *二维数组转稀疏数组
 * @author 蜡笔小新
 *
 */
public class Test3 {

	public static void main(String []args) {
		int arr[][]=new int [10][10];
		arr[0][5]=7;
		arr[2][7]=6;
		arr[3][2]=1;
		arr[5][5]=3;
		arr[7][1]=4;
		arr[8][7]=9;
		
		//遍历二位数组,得到有效数据的个数
		int sum=0;
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;j++) {
				if(arr[i][j]!=0) sum++;
			}
		}
		//根据有效数据的个数,确定稀疏数组 sparseArr[sum+1][3]
		int [][]sparseArr=new int[sum+1][3];
		//给稀疏数组的第一行赋值
		//sparseArr[0][0]=二位数组的行,
		//sparseArr[0][1]=二位数组的列,
		//sparseArr[0][2]=二位数组中的有效值
		sparseArr[0][0]=arr.length;
		sparseArr[0][1]=arr[0].length;
		sparseArr[0][2]=sum;
		//遍历二位数组,给稀疏数组赋值
		int t=1;
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;j++) {
				if(arr[i][j]!=0) {
					sparseArr[t][0]=i;
					sparseArr[t][1]=j;
					sparseArr[t][2]=arr[i][j];
					t++;
				}
			}
		}
		
		System.out.println("--------------二位数组-------------");
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;j++) {
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
		
		System.out.println("--------------稀疏数组-------------");
		for(int i=0;i<sparseArr.length;i++) {
			for(int j=0;j<sparseArr[i].length;j++) {
				System.out.print(sparseArr[i][j]+" ");
			}
			System.out.println();
		}
	}
	
}

运行结果:
在这里插入图片描述

三、根据稀疏数组转二维数组

  1. 根据稀疏数组的第一行确定二位数组的大小
  2. 遍历稀疏数组给二维数组赋值

/**
 *  *稀疏数组转二维数组
 * @author 蜡笔小新
 *
 */
public class Test3 {

	public static void main(String []args) {
		int sparseArr[][]={
				{10,10,6},
				{0,5,7},
				{2,7,6},
				{3,2,1},
				{5,5,3},
				{7,1,4},
				{8,7,9}
				};
		
		//根据稀疏数组的第一行确定二位数组的大小
		int [][]arr=new int[sparseArr[0][0]][sparseArr[0][1]];
		//遍历稀疏数组给二维数组赋值
		int sum=0;
		for(int i=1;i<sparseArr.length;i++) {
			arr[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
		}
		
		System.out.println("--------------稀疏数组-------------");
		for(int i=0;i<sparseArr.length;i++) {
			for(int j=0;j<sparseArr[i].length;j++) {
				System.out.print(sparseArr[i][j]+" ");
			}
			System.out.println();
		}
		
		System.out.println("--------------二位数组-------------");
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;j++) {
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
	}
	
}

运行结果:
在这里插入图片描述

- - -》关注博主公众号【C you again】,获取更多IT资源(IT技术文章,毕业设计、课程设计系统源码,经典游戏源码,HTML网页模板,点击查看- - - >>>>>

上一篇:
下一篇: 数据结构与算法——队列

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值