稀疏数组

Posted fanxp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了稀疏数组相关的知识,希望对你有一定的参考价值。

一、概念

  SparseArray 主要用于对数据压缩,就拿一个存储五子棋的游戏来实现

技术图片

这个棋盘的格局11×11,默认为0,黑子用1代替,蓝子用2代替,如果直接存储会浪费很多空间。

通过定义一个对象来存储每一个数据的位置和值,就可以减少存储空间的浪费

黑子:Row:1   Column:2  Value:1

蓝子:Row:2   Column:3  Value:3

 

二、实现

  这里采用go语言实现

package main

import "fmt"

type Node struct {
    Row    int
    Column int
    Value  int
}

//棋盘格局
const ROW, COLUMN int = 11, 11

func main() {
    //创建一个原始的二维数组
    var dataMap [ROW][COLUMN]int
    dataMap[1][2] = 1
    dataMap[2][3] = 2

    //数据存储
    nodes := []Node{
        Node{
            Row:    ROW,
            Column: COLUMN,
            Value:  0,
        },
    }

    fmt.Println("打印棋盘数据----------------------------")
    for i, r := range dataMap {
        for j, v := range r {
            fmt.Printf("%d	", v)
            if v != 0 {
                nodes = append(nodes, Node{
                    Row:    i,
                    Column: j,
                    Value:  v,
                })
            }
        }
        fmt.Println()
    }

    fmt.Println("打印保存数据----------------------------")
    for _, item := range nodes {
        fmt.Printf("%d %d %d
", item.Row, item.Column, item.Value)
    }

    fmt.Println("打印还原数据----------------------------")
    if len(nodes) == 0 {
        return
    }
    var restoreData [ROW][COLUMN]int
    for _, item := range nodes[1:] {
        restoreData[item.Row][item.Column] = item.Value
    }
    for _, r := range restoreData {
        for _, v := range r {
            fmt.Printf("%d	", v)
        }
        fmt.Println()
    }
}

打印输出

技术图片

 

以上是关于稀疏数组的主要内容,如果未能解决你的问题,请参考以下文章

稀疏数组

稀疏数组

数据结构稀疏数组 --- 应用场景,转换的思路分析,代码实现

数据结构与算法—稀疏数组和队列

稀疏数组

java数据结构与算法:稀疏数组的讲解运用