- 稀疏数组 sparesearray
- 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组
处理方法:
1)记录该数组一共有几行几列,有多少个不同的值
2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
稀疏数组是一种典型的压缩算法。
- 编写一个五子棋的程序,有存盘退出和续上盘的功能
package main import "fmt" 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() } type ValNode struct { arr int col int val int } valnode:=ValNode{ arr: 11, col: 11, val: 0, } var sparseArray []ValNode sparseArray=append(sparseArray,valnode) //3.转成稀疏数组 for i,v:=range chessMap{ for j,v1:=range v{ if v1!=0{ valnode=ValNode{ arr: i, col: j, val: v1, } sparseArray=append(sparseArray,valnode) } } } fmt.Println("当前的稀疏数组是::::") for i,v:=range sparseArray{ fmt.Printf("%d %d %d %d\n",i,v.arr,v.col,v.val) } fmt.Println() //存盘 //文件的读写 省略 //恢复原始数组 var chessMap2 [11][11]int for i,valnode:=range sparseArray{ if i!=0{ //跳过第一行 chessMap2[valnode.arr][valnode.col]=valnode.val } } fmt.Println("恢复后的原始数据:::") for _,v:=range chessMap2{ for _,v1:=range v{ fmt.Printf("%d\t",v1) } fmt.Println() } }