当前位置: 代码迷 >> 综合 >> 稀疏数组与队列
  详细解决方案

稀疏数组与队列

热度:12   发布时间:2024-01-29 05:31:00.0

1、稀疏数组

问题:由于有的数组里面有大量的重复元素,导致浪费很大的内存空间,为了节省内存空间,则要对其进行压缩,因此要用到稀疏矩阵。

处理方法:(1)、记录数组一共有几行几列,有多少不同的值。

                  (2)、把具有不同值得元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。

代码实现如下:

package com.wh.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.读取规模int chessArry2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];//2.将原来的值赋值for(int i=1;i<sparseArr.length;i++) {chessArry2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];}//输出恢复后的二维数组System.out.println();System.out.println("恢复后的二维数组");for(int [] row: chessArry2) {for(int data: row) {System.out.printf("%d\t",data);}System.out.println();}}}

 

  相关解决方案