20190921

数据结构--稀疏数组

 

    思路:将一个二维数组放进另一个数组中,前提:原始数组必须是有某个元素占据大部分位置例如0;

       重新定义一个二维数组,int arr[][] = new int [sum+1][3] 

       再将原始数组的 行 列 值 放进arr中的arr[0][0]-行 arr[0][1]-列 arr[0][2]-值

       例如一个11*11的二维数组有5个其他元素转化为稀疏数组

       然后就是讲稀疏数组给反转回二维数组

       

       

public class Erwei_Xishu {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num = 0;
		//创建原始数组arr
		int arr[][] = new int[11][11];
		arr[5][5] = 1;
		arr[6][7] = 2;
		arr[1][4] = 1;
		arr[2][9] = 2;
		arr[6][10] = 1;
		for(int i[]:arr)
		{
			for(int j:i)
			{
//				System.out.print(j+"\t");
				if(j!=0)
				{
					num++;
				}
			}
//			System.out.println();
		}
		System.out.println(num);
		
		//创建个新的二维数组--稀疏数组
		int xisu[][] = new int[num+1][3];
		xisu[0][0] = 11;
		xisu[0][1] = 11;
		xisu[0][2] = num;
		
		int sum = 1;//建立一个计数器
		for(int i=0;i<arr.length;i++)
		{
			for(int j=0;j<arr[i].length;j++)
			{
				if(arr[i][j]!=0)
				{
					xisu[sum][0] = i;
					xisu[sum][1] = j;
					xisu[sum][2] = arr[i][j];
					sum++;
				}
			}
		
		
		}
		//输出稀疏数组
		for(int y[]:xisu)
		{
			for(int c:y)
			{
				System.out.print(c+"\t");
			}
			System.out.println();
		}
		
		//创建原始数组,并将稀疏数组的组反传给原始数组
		int arr1[][] = new int [xisu[0][0]][xisu[0][1]];
		for(int i=1;i<xisu.length;i++)
		{
				arr1[xisu[i][0]][xisu[i][1]] = xisu[i][2];
		}
		
		for(int a[]:arr1)
		{
			for(int v:a)
			{
				System.out.print(v+"\t");
			}
			System.out.println();
		}
		
		
	}
	
}
知识兔

  

计算机