数据结构之稀释数组


阅读目录

一、稀释数组

二、稀释数组应用

一、 稀释数据

1.实际需求


数据结构之稀释数组_第1张图片

2.基本介绍



数据结构之稀释数组_第2张图片

二、稀释数组应用

1.存放棋盘

type ValueNode struct {
    row int
    col int
    val int
}

func main() {
    // 1.创建原始数组
    var chessMap [11][11]int
    chessMap[1][2] = 1 //黑子
    chessMap[2][3] = 2 //白子

    // 2. 输出查看原始数组
    for _, v := range chessMap {
        for _, v1 := range v {
            fmt.Printf("%d\t", v1)
        }
        fmt.Println()
    }
    // 3. 转成稀疏数组 -> 算法
    //(1)遍历chessMap 如果我们发现一个元素的值不为0,创建一个node结构体
    //(2)将其放入到对应的切片中
    var sparseArr []ValueNode

    // 标准稀疏数组,二维数组行 列 默认值
    valNode := ValueNode{
        row: 11,
        col: 11,
        val: 0,
    }
    sparseArr = append(sparseArr, valNode)

    for k, v := range chessMap {
        for k1, v1 := range v {
            if v1 != 0 {
                // 创建一个ValNode节点
                valNode := ValueNode{
                    row: k,
                    col: k1,
                    val: v1,
                }
                // 标准的稀疏数组还需要包含有几行几列
                sparseArr = append(sparseArr, valNode)

            }
        }
        fmt.Println()
    }
    fmt.Println("稀疏数组是:")
    for i, node := range sparseArr {
        fmt.Printf("%d: %d %d %d\n", i, node.row, node.col, node.val)
    }

    // 4.稀疏数组恢复棋盘
    var chessMap2 [11][11]int

    for i, v3 := range sparseArr {
        if i != 0 { // 跳过第一行
            chessMap2[v3.row][v3.col] = v3.val
        }

    }

    fmt.Println("恢复后的原始数据.......")
    for _, v := range chessMap2 {
        for _, v1 := range v {
            fmt.Printf("%d\t", v1)
        }
        fmt.Println()
    }
}

你可能感兴趣的:(数据结构之稀释数组)