【算法笔记】稀疏数组sparseArray的简单实践
Page content
今天用go语言简单的写了一下稀疏数组的简单实例饿。
为了以后方便查看,当做笔记整理了一下~~
1.稀疏数组结构
2.代码实例
package main
import "fmt"
type ValNode struct {
row int
col int
val int
}
func main() {
//创建数组
var result [11][11]int
result[1][1] = 1
result[2][2] = 2
result[3][3] = 1
result[4][4] = 2
//遍历打印
for _, v := range result {
for _, v2 := range v {
fmt.Printf("%d ", v2)
}
fmt.Println()
}
var sparseArr []ValNode
//标准的一个稀疏数组应该还有一个 记录元素的二维数组的规模(行和列,默认值)
//创建一个ValNode 值结点
valNode := ValNode{
row: 8,
col: 8,
val: 0,
}
sparseArr = append(sparseArr, valNode)
for i, v := range result {
for j, v2 := range v {
if v2 != 0 {
//创建一个ValNode 值结点
valNode := ValNode{
row: i,
col: j,
val: v2,
}
sparseArr = append(sparseArr, valNode)
}
}
}
//输出稀疏数组
fmt.Println("当前的稀疏数组是:::::")
for i, valNode := range sparseArr {
fmt.Printf("%d: %d %d %d\n", i, valNode.row, valNode.col, valNode.val)
}
var result2 [8][8]int
// 遍历 sparseArr [遍历文件每一行]
for i, valNode := range sparseArr {
if i != 0 { //跳过第一行记录值
result2[valNode.row][valNode.col] = valNode.val
}
}
// 看看chessMap2 是不是恢复.
fmt.Println("恢复后的原始数据......")
for _, v := range result2 {
for _, v2 := range v {
fmt.Printf("%d ", v2)
}
fmt.Println()
}
}
执行结果
$ go run main.go
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 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: 8 8 0
1: 1 1 1
2: 2 2 2
3: 3 3 1
4: 4 4 2
恢复后的原始数据......
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 2 0 0 0 0 0
0 0 0 1 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
欢迎大家的意见和交流
email: li_mingxie@163.com