首页 > 编程语言 > 详细

数据结构之数组

时间:2020-01-06 16:34:49      阅读:69      评论:0      收藏:0      [点我收藏+]

本篇文章将介绍一个重要数据结构——数组,并用Java实现

1、稀疏数组

1.1、基本内容

  • 定义:一个简化记录方式的二维数组。
  • 目的:由于部分二维数组的相同元素较多,占用空间过大,使用稀疏数组来存放可以节省空间。
  • 实现方式:在稀疏数组的第一行存放原二维数组的基本信息(共计几行几列几个特别元素),后面的逐一存放特别元素的行列数和元素值。有如三维坐标系,存放的是坐标,x、y、z分别代表行数、列数、数值
  • 引入项目:五子棋项目。

1.2、代码实现

  下面使用Java来实现将一个基本二维数组转化为稀疏数组,再将稀疏数组还原为一个基本二维数组。从中体现稀疏数组的作用和使用方式。

首先建立一个12*12的基本二维数组并存入一些元素

1   int[][] arr1=new int[11][11];
2         arr1[1][2]=1;
3         arr1[2][3]=2;
4         arr1[4][5]=2;

遍历输出数组看一下

1  for(int[] temp:arr1){
2    for(int item:temp) {
3      System.out.print(item+"\t");
4    }
5    System.out.println();
6 }
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    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    

下面遍历基本数组,得到基本数组的基本信息(非零元素总数)

int sum=0;//元素总数
for(int i=0;i<11;i++) {
    for(int j=0;j<11;j++) {
        if(arr1[i][j]==0) {
            continue;
        }else {
            sum++;
        }
}
}
 

创建稀疏数组并存入基本信息

1     int[][] sparseArr=new int[sum+1][3];
2     sparseArr[0][0]=11;
3     sparseArr[0][1]=11;
4     sparseArr[0][2]=sum;

遍历存入非零元素

 1     int hang=0;
 2     int lie=0;
 3     for(int i=0;i<11;i++) {
 4         for(int j=0;j<11;j++) {
 5             if(arr1[i][j]==0) {
 6                 continue;
 7             }else {
 8                 hang++;
 9                 sparseArr[hang][lie]=i;
10                 sparseArr[hang][lie+1]=j;
11                 sparseArr[hang][lie+2]=arr1[i][j];                
12             }
13         }
14     }

打印一下填充好的稀疏数组看看效果

1     for(int[] temp:sparseArr) {
2         for(int item:temp) {
3             System.out.print(item+"\t");
4         }
5         System.out.println();
6     }
11    11    3    
1     2     1    
2     3     2    
4     5     2    

可以看出第一行存放着基本数据,行数、列数、需要存放的元素数

后三行存放着形式为(行数、列数、元素值)的的三组数据

接下来将稀疏数组转化为二维基本数组

创建二维数组,代入基本数据,遍历输入特定位置的元素

1     int[][] arr2=new int [sparseArr[0][0]][sparseArr[0][1]];        
2     for(int i=1;i<hang+1;i++) {
3         arr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
4     }

遍历打印基础数组

1     for(int[] temp:arr2) {
2         for(int item:temp) {
3             System.out.print(item+"\t");
4         }
5         System.out.println();
6     }
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    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    

数据结构之数组

原文:https://www.cnblogs.com/hbc314/p/12156701.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!