go 稀疏数组
稀疏数组实现:
package main
import "fmt"
type SparseArray struct {
col int
row int
value int
}
func main() {
// 源数据格式:
/*
0 0 0 2 0 0 0 0 0 0
0 0 1 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
*/
va := [10][10]int{}
va[0][3] = 2
va[1][2] = 1
fmt.Println("原稀疏数组")
for _, v := range va {
for _, v2 := range v {
fmt.Printf("%d\t", v2)
}
fmt.Printf("\n")
}
// 生成稀疏数组
var sparseArray []SparseArray
baseArray := SparseArray{
col: 11,
row: 11,
value: 0,
}
sparseArray = append(sparseArray, baseArray)
for i, v := range va {
for j, v2 := range v {
if v2 != 0 {
var array = SparseArray{
col: i,
row: j,
value: v2,
}
sparseArray = append(sparseArray, array)
}
}
}
// 打印稀疏数组
fmt.Printf("稀疏数组: %v\n", sparseArray)
// 恢复稀疏数组
// 1、先获取x轴、y轴及默认值val
baseNum := sparseArray[0]
fmt.Printf("x轴: %d\ny轴: %d\n默认值val: %d\n", baseNum.col, baseNum.row, baseNum.value)
x := baseNum.col
y := baseNum.row
val := baseNum.value
// 2、 恢复
for i := 0; i < x; i++ {
for j := 0; j < y; j++ {
// 获取稀疏数组中的数据,防止下标溢出
if i+1 < len(sparseArray) {
array := sparseArray[i+1]
// 当col 和 row 与稀疏数组中的col、row对应时,打印value值
if array.col == i && array.row == j {
fmt.Printf("%d\t", array.value)
} else {
// 其他情况下值为:默认值
fmt.Printf("%d\t", val)
}
} else {
fmt.Printf("%d\t", val)
}
}
println("")
}
// 可以考虑落盘(先把稀疏数组写入文件,再从文件中读出)
}

浙公网安备 33010602011771号