数据结构之稀释数组
阅读目录
一、稀释数组
二、稀释数组应用
一、 稀释数据
1.实际需求
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()
}
}