Java 数据结构和算法(稀疏数组----数据结构)

1.算法和数据结构的关系

  1. 数据结构是一门研究组织数据方式的学科,有了编程语言也就有了数据结构,学好数据结构可以编写出更漂亮的,更有效的代码
  2. 程序=数据结构+算法
  3. 数据结构是算法的基础,要想学好算法需要把数据结构学到位

 

2.数据结构的构成:

数据结构包括线性结构和非线性结构

2.1线性结构:

  • 线性结构作为最常用的数据结构,其特点是数据元素存在一对一的线性关系
  • 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表——内存中存储的地址是连续不断的;链式存储的线性表称为链表——内存中存储的地址不一定是连续的
  • 线性结构常见的有:数组、队列、链表和栈

2.2非线性结构:

  • 非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
  • 非线性结构常见的有:二维数组、多维数组、广义表、树结构、图结构

3.稀疏数组:

3.1 有如下需求

  • 编写五子棋程序,有存盘退出和续盘的功能Java 数据结构和算法(稀疏数组----数据结构)_第1张图片
  • 分析问题:

        因为该二维数组的很多默认值都是0,因此记录了很多没有意义的数组,这时候就要换一种数组来存储即稀疏数组

3.2 稀疏数组基本介绍

  •  当一个数组中的大部分元素为0或者为同一个值的时候,可以用稀疏数组来进行存储
  •  处理方法:
  1. 稀疏数组第一行数据记录的几行几列,都多少个不同的值
  2. 吧具有不同值的元素的行列记录在一个小规模的数组中,从而缩小程序的规模

3.3 稀疏数组举例

Java 数据结构和算法(稀疏数组----数据结构)_第2张图片

3.4 需求分析

Java 数据结构和算法(稀疏数组----数据结构)_第3张图片

3.5 代码实现

package com.zjh.suanfa.sparsearray;

import java.util.HashMap;
import java.util.Map;

/**
 * 稀疏数组
 */
public class SparseArray {
    public static void main(String[] args) {
        //先创建一个原始的二维数组 11*11
        //0表示没有棋子 1表示黑子 2表示篮子
        int chess[][]=new int[11][11];
        chess[1][2]=1;
        chess[2][3]=2;
        chess[10][10]=2;
        System.out.println("原始数据");
        for (int a[]:chess) {
            for (int b:a) {
                System.out.printf("%d\t",b);
            }
            System.out.println();
        }

        //转换成稀疏数组(三列分别记录 行列值  第一行记录总共多少行 多少列 以及不同值的个数)
        //获得原始数组里面不同值的个数 有几个那么稀疏数组就会有对应+1条数据
        int sum=0;
        for (int i=0;i

3.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    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    2    
稀疏数组==============
11    11    3    
1    2    1    
2    3    2    
10    10    2    
恢复以后的数组============
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    2    

 

你可能感兴趣的:(Java数据结构和算法)