1. 稀疏数组 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()
	}

	}